WPF桌面端开发-ReSharper配置(代码生成和代码清理)

关闭VS代码AI填充

ReSharper的代码提示已经很好用了,VS自己也有AI提示,都开的时候会打架,体验不好。

工具 => 选项 => IntelliCode

全部取消勾选即可

image-20231220145646437

常用快捷键

  • Ctrl + /:注释与解除注释

  • Alt + F7:查找引用

  • Alt + F8:查找赋值

  • Alt + Insert 自动生成代码

  • Alt + Enter 建议

  • Ctrl + F11:查看代码结构

  • Ctrl + N:Go To Everything 定位到任何,非常强大

  • Ctrl + Shift + N:Go To File 定位到文件

  • Ctrl + F12:Go To File Member 在当前类中查找

  • Shift+F6:重命名任何东西,重构利器

  • Ctrl+Shift+R 重构

  • Ctrl + Tab:活动文件之间切换,当前打开的所有文件

  • Ctrl + Shift + Alt +向上/向下:上下行代码交换位置

  • Ctrl + W:快速选中整个/一块单词

  • Ctrl + Alt + F:Clean Code

  • Ctrl + Alt + J:Sorround with Template,快速添加语句块,如if,for,try catch,using,#region

  • Ctrl + Q:快速文档

  • Alt + F12:显示下一个Error

  • Ctrl + E:显示最近编辑的文件

上下左右移动

VS内置的功能可以方便的移动一行,但是Resharper的移动功能可以移动整个方法的位置,属性的位置,语句行的位置,乃至方法签名中参数的位置。

默认的快捷键是:Ctrl + Shift + Alt + Up/Down/Left/Right

类提取为文件

把包下的类提取成文件并移动到其他包下

Alt+Enter 把类提取为文件,文件会自动打开,在类名上点击F6,选择Move to Folder

image-20230426181928920

代码生成

为了方便数据生成,我们添加基类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System.ComponentModel;

namespace Z.Common
{
public class ZNotifyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}

页面数据源类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ToolbarModel : ZNotifyModel
{
public ObservableCollection<ToolbarMenu> menuList { get; set; }
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public ToolbarModel()
{
menuList = new ObservableCollection<ToolbarMenu>();
}
}

假如我们想方便生成这样的代码

1
2
3
4
5
6
7
8
9
10
11
private string _name;

public string Name
{
get => _name;
set
{
_name = value;
OnPropertyChanged("Name");
}
}

自定义属性模板

添加模板zprop

1
2
3
4
5
6
7
8
9
10
11
12
13
private $string$ _m$Name$;

public $string$ $Name$
{
get => _m$Name$;
set
{
_m$Name$ = value;
OnPropertyChanged("$Name$");
}
}

$END$

注意修改右侧的属性

image-20231212114852690

ReSharper

安装ReSharper插件后,所有自定义的代码段都失效了,是因为

安装ReSharper插件后,它会自动导入代码段,但是后来的代码段是不会被导入的,只能我们自己添加。

我们可以找到

扩展 > Resharper > Tool > Templates Explor

选择语言 新建

image-20230724163252432

内置配置

我们先打开prop的配置

这个相比C#的创建,简单多了

所有输入的$string$都会定义一个被替换的变量

还有特殊的变量$END$,变量作用在用户写完就是跳到END位置。

代码清理

关闭VS自带的代码清理

工具 => 选项 => 文本编辑器 => 代码清理

取消清理的勾选

image-20230809171036283

取消拼写检查

Options => Tools => ReSpeller

image-20230226211423828

格式化

配置文件方式配置(推荐)

解决方案 右键

image-20230217184938036

在项目下就会生成文件.editorconfig

Visual Studio 一旦检测到 .editorconfig 文件的存在,格式约定就会自动生效。

生效规则

对于相同的配置项,以.editorconfig为准。

但如果IDE配置和.editorconfig的配置项不冲突,那么两者都会生效。

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
root = true
# 如果要从更高级别的目录继承 .editorconfig 设置,请删除以下行

[*]
end_of_line = crlf
charset = utf-8-bom
indent_size = 4
tab_width = 4
trim_trailing_whitespace = true
resharper_xaml_binding_without_context_not_resolved_highlighting = none
resharper_xaml_binding_with_context_not_resolved_highlighting = none

# ReSharper properties
resharper_apply_auto_detected_rules = false
resharper_apply_on_completion = true
resharper_blank_lines_after_block_statements = 0
resharper_blank_lines_after_start_comment = 0
resharper_blank_lines_around_local_method = 0
resharper_braces_for_for = required
resharper_braces_for_foreach = required
resharper_braces_for_ifelse = required
resharper_braces_for_while = required
resharper_braces_redundant = false
resharper_case_block_braces = next_line_shifted_2
resharper_csharp_keep_blank_lines_in_code = 0
resharper_csharp_keep_blank_lines_in_declarations = 1
resharper_csharp_max_line_length = 300
resharper_csharp_wrap_arguments_style = chop_if_long
resharper_csharp_wrap_before_declaration_lpar = true
resharper_csharp_wrap_extends_list_style = chop_if_long
resharper_csharp_wrap_parameters_style = chop_if_long
resharper_empty_block_style = together_same_line
resharper_enforce_line_ending_style = true
resharper_keep_existing_declaration_block_arrangement = true
resharper_keep_existing_embedded_block_arrangement = true
resharper_keep_existing_enum_arrangement = true
resharper_keep_existing_expr_member_arrangement = false
resharper_keep_existing_initializer_arrangement = false
resharper_keep_existing_linebreaks = false
resharper_max_array_initializer_elements_on_line = 2
resharper_max_attribute_length_for_same_line = 2
resharper_max_enum_members_on_line = 2
resharper_max_formal_parameters_on_line = 2
resharper_max_initializer_elements_on_line = 2
resharper_max_invocation_arguments_on_line = 2
resharper_new_line_before_while = true
resharper_show_autodetect_configure_formatting_tip = false
resharper_use_indent_from_vs = false
resharper_wrap_after_declaration_lpar = true
resharper_wrap_after_invocation_lpar = true
resharper_wrap_array_initializer_style = chop_if_long
resharper_wrap_before_declaration_rpar = true
resharper_wrap_before_invocation_rpar = true
resharper_wrap_chained_binary_expressions = chop_if_long
resharper_wrap_chained_binary_patterns = chop_if_long
resharper_wrap_chained_method_calls = chop_if_long
resharper_wrap_enum_declaration = chop_if_long
resharper_wrap_list_pattern = chop_if_long
resharper_wrap_switch_expression = chop_if_long

# Microsoft .NET properties
csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async, file, required:suggestion
csharp_style_expression_bodied_accessors = true:suggestion
csharp_style_expression_bodied_properties = true:suggestion
csharp_style_namespace_declarations = block_scoped:suggestion
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_style_var_elsewhere = false:warning
csharp_style_var_for_built_in_types = false:warning
csharp_style_var_when_type_is_apparent = false:warning
csharp_using_directive_placement = inside_namespace:silent
dotnet_naming_rule.constants_rule.import_to_resharper = as_predefined
dotnet_naming_rule.constants_rule.severity = warning
dotnet_naming_rule.constants_rule.style = all_upper_style
dotnet_naming_rule.constants_rule.symbols = constants_symbols
dotnet_naming_rule.interface_should_be_begins_with_i_rule.import_to_resharper = True
dotnet_naming_rule.interface_should_be_begins_with_i_rule.resharper_description = interface_should_be_begins_with_i
dotnet_naming_rule.interface_should_be_begins_with_i_rule.resharper_guid = 933f76ec-ec8e-4474-a658-b83158f574b3
dotnet_naming_rule.interface_should_be_begins_with_i_rule.severity = warning
dotnet_naming_rule.interface_should_be_begins_with_i_rule.style = i_upper_camel_case_style
dotnet_naming_rule.interface_should_be_begins_with_i_rule.symbols = interface_should_be_begins_with_i_symbols
dotnet_naming_rule.method_should_be_pascal_case_rule.import_to_resharper = True
dotnet_naming_rule.method_should_be_pascal_case_rule.resharper_description = method_should_be_pascal_case
dotnet_naming_rule.method_should_be_pascal_case_rule.resharper_guid = 2d103516-4dde-415f-8248-29df8b4ab1c1
dotnet_naming_rule.method_should_be_pascal_case_rule.severity = warning
dotnet_naming_rule.method_should_be_pascal_case_rule.style = upper_camel_case_style
dotnet_naming_rule.method_should_be_pascal_case_rule.symbols = method_should_be_pascal_case_symbols
dotnet_naming_rule.private_constants_rule.import_to_resharper = as_predefined
dotnet_naming_rule.private_constants_rule.severity = warning
dotnet_naming_rule.private_constants_rule.style = all_upper_style
dotnet_naming_rule.private_constants_rule.symbols = private_constants_symbols
dotnet_naming_rule.property_rule.import_to_resharper = as_predefined
dotnet_naming_rule.property_rule.severity = none
dotnet_naming_rule.property_rule.style = upper_camel_case_style
dotnet_naming_rule.property_rule.symbols = property_symbols
dotnet_naming_rule.public_fields_rule.import_to_resharper = as_predefined
dotnet_naming_rule.public_fields_rule.severity = none
dotnet_naming_rule.public_fields_rule.style = upper_camel_case_style
dotnet_naming_rule.public_fields_rule.symbols = public_fields_symbols
dotnet_naming_rule.static_readonly_rule.import_to_resharper = as_predefined
dotnet_naming_rule.static_readonly_rule.severity = warning
dotnet_naming_rule.static_readonly_rule.style = upper_camel_case_style
dotnet_naming_rule.static_readonly_rule.symbols = static_readonly_symbols
dotnet_naming_rule.types_and_namespaces_rule.import_to_resharper = as_predefined
dotnet_naming_rule.types_and_namespaces_rule.resharper_style = AaBb, I + AaBb + I
dotnet_naming_rule.types_and_namespaces_rule.severity = warning
dotnet_naming_rule.types_and_namespaces_rule.style = upper_camel_case_style
dotnet_naming_rule.types_and_namespaces_rule.symbols = types_and_namespaces_symbols
dotnet_naming_rule.types_should_be_pascal_case_rule.import_to_resharper = True
dotnet_naming_rule.types_should_be_pascal_case_rule.resharper_description = types_should_be_pascal_case
dotnet_naming_rule.types_should_be_pascal_case_rule.resharper_guid = a43c3ac7-d8a7-48b2-8484-495fe7e8c999
dotnet_naming_rule.types_should_be_pascal_case_rule.severity = warning
dotnet_naming_rule.types_should_be_pascal_case_rule.style = upper_camel_case_style
dotnet_naming_rule.types_should_be_pascal_case_rule.symbols = types_should_be_pascal_case_symbols
dotnet_naming_style.all_upper_style.capitalization = all_upper
dotnet_naming_style.all_upper_style.word_separator = _
dotnet_naming_style.i_upper_camel_case_style.capitalization = pascal_case
dotnet_naming_style.i_upper_camel_case_style.required_prefix = I
dotnet_naming_style.upper_camel_case_style.capitalization = pascal_case
dotnet_naming_symbols.constants_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.constants_symbols.applicable_kinds = field
dotnet_naming_symbols.constants_symbols.required_modifiers = const
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.applicable_accessibilities = local,public,internal,private,protected,protected_internal,private_protected
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.applicable_kinds = interface
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.resharper_applicable_kinds = interface
dotnet_naming_symbols.interface_should_be_begins_with_i_symbols.resharper_required_modifiers = any
dotnet_naming_symbols.method_should_be_pascal_case_symbols.applicable_accessibilities = local,public,internal,private,protected,protected_internal,private_protected
dotnet_naming_symbols.method_should_be_pascal_case_symbols.applicable_kinds = method
dotnet_naming_symbols.method_should_be_pascal_case_symbols.resharper_applicable_kinds = method
dotnet_naming_symbols.method_should_be_pascal_case_symbols.resharper_required_modifiers = any
dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
dotnet_naming_symbols.property_symbols.applicable_accessibilities = *
dotnet_naming_symbols.property_symbols.applicable_kinds = property
dotnet_naming_symbols.public_fields_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.public_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.static_readonly_symbols.applicable_accessibilities = public,internal,protected,protected_internal,private_protected
dotnet_naming_symbols.static_readonly_symbols.applicable_kinds = field
dotnet_naming_symbols.static_readonly_symbols.required_modifiers = static,readonly
dotnet_naming_symbols.types_and_namespaces_symbols.applicable_accessibilities = *
dotnet_naming_symbols.types_and_namespaces_symbols.applicable_kinds = namespace,class,struct,enum,delegate
dotnet_naming_symbols.types_should_be_pascal_case_symbols.applicable_accessibilities = local,public,internal,private,protected,protected_internal,private_protected
dotnet_naming_symbols.types_should_be_pascal_case_symbols.applicable_kinds = class,struct,interface,enum
dotnet_naming_symbols.types_should_be_pascal_case_symbols.resharper_applicable_kinds = class,struct,interface,enum
dotnet_naming_symbols.types_should_be_pascal_case_symbols.resharper_required_modifiers = any
dotnet_separate_import_directive_groups = true
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:none
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:none
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:none
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
dotnet_style_qualification_for_event = false:suggestion
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion

# ReSharper inspection severities
resharper_arrange_namespace_body_highlighting = hint
resharper_arrange_static_member_qualifier_highlighting = none
resharper_arrange_this_qualifier_highlighting = hint
resharper_arrange_type_member_modifiers_highlighting = hint
resharper_arrange_type_modifiers_highlighting = hint
resharper_built_in_type_reference_style_for_member_access_highlighting = hint
resharper_built_in_type_reference_style_highlighting = hint
resharper_check_namespace_highlighting = none
resharper_convert_to_using_declaration_highlighting = hint
resharper_not_accessed_field_local_highlighting = none
resharper_redundant_base_qualifier_highlighting = warning
resharper_redundant_name_qualifier_highlighting = none
resharper_suggest_discard_declaration_var_style_highlighting = suggestion
resharper_unused_member_global_highlighting = none
resharper_unused_member_local_highlighting = none

# c# 文件
[*.cs]

#### Core EditorConfig 选项 ####

# 缩进和间距
indent_size = 4
indent_style = space
tab_width = 4

# 新行首选项
end_of_line = crlf
insert_final_newline = false

#### .NET 编码约定 ####

# 组织 Using
dotnet_separate_import_directive_groups = true
dotnet_sort_system_directives_first = true
file_header_template =

# this. 和 Me. 首选项
dotnet_style_qualification_for_event = false
dotnet_style_qualification_for_field = false
dotnet_style_qualification_for_method = false
dotnet_style_qualification_for_property = false

# 语言关键字与 bcl 类型首选项
dotnet_style_predefined_type_for_locals_parameters_members = true
dotnet_style_predefined_type_for_member_access = true

# 括号首选项
dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_binary_operators = always_for_clarity
dotnet_style_parentheses_in_other_operators = never_if_unnecessary
dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity

# 修饰符首选项
dotnet_style_require_accessibility_modifiers = for_non_interface_members

# 表达式级首选项
dotnet_style_coalesce_expression = true
dotnet_style_collection_initializer = true
dotnet_style_explicit_tuple_names = true
dotnet_style_namespace_match_folder = true
dotnet_style_null_propagation = true
dotnet_style_object_initializer = true:silent
dotnet_style_operator_placement_when_wrapping = beginning_of_line
dotnet_style_prefer_auto_properties = true
dotnet_style_prefer_compound_assignment = true
dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion
dotnet_style_prefer_conditional_expression_over_return = true:suggestion
dotnet_style_prefer_foreach_explicit_cast_in_source = when_strongly_typed
dotnet_style_prefer_inferred_anonymous_type_member_names = true
dotnet_style_prefer_inferred_tuple_names = true
dotnet_style_prefer_is_null_check_over_reference_equality_method = true
dotnet_style_prefer_simplified_boolean_expressions = true
dotnet_style_prefer_simplified_interpolation = true

# 字段首选项
dotnet_style_readonly_field = false:silent

# 参数首选项
dotnet_code_quality_unused_parameters = all

# 禁止显示首选项
dotnet_remove_unnecessary_suppression_exclusions = none

# 新行首选项
dotnet_style_allow_multiple_blank_lines_experimental = false:suggestion
dotnet_style_allow_statement_immediately_after_block_experimental = true

#### c# 编码约定 ####

# var 首选项
csharp_style_var_elsewhere = false
csharp_style_var_for_built_in_types = false
csharp_style_var_when_type_is_apparent = false

# Expression-bodied 成员
csharp_style_expression_bodied_accessors = true
csharp_style_expression_bodied_constructors = false
csharp_style_expression_bodied_indexers = true
csharp_style_expression_bodied_lambdas = true
csharp_style_expression_bodied_local_functions = false
csharp_style_expression_bodied_methods = false
csharp_style_expression_bodied_operators = false
csharp_style_expression_bodied_properties = true

# 模式匹配首选项
csharp_style_pattern_matching_over_as_with_null_check = true:warning
csharp_style_pattern_matching_over_is_with_cast_check = true:warning
csharp_style_prefer_extended_property_pattern = true
csharp_style_prefer_not_pattern = true:warning
csharp_style_prefer_pattern_matching = true:warning
csharp_style_prefer_switch_expression = true

# Null 检查首选项
csharp_style_conditional_delegate_call = true

# 修饰符首选项
csharp_prefer_static_local_function = false:silent
csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async
csharp_style_prefer_readonly_struct = false:silent
csharp_style_prefer_readonly_struct_member = true

# 代码块首选项
csharp_prefer_braces = true
csharp_prefer_simple_using_statement = true
csharp_style_namespace_declarations = block_scoped
csharp_style_prefer_method_group_conversion = true
csharp_style_prefer_top_level_statements = true

# 表达式级首选项
csharp_prefer_simple_default_expression = true
csharp_style_deconstructed_variable_declaration = true
csharp_style_implicit_object_creation_when_type_is_apparent = true
csharp_style_inlined_variable_declaration = true
csharp_style_prefer_index_operator = true
csharp_style_prefer_local_over_anonymous_function = true
csharp_style_prefer_null_check_over_type_check = true
csharp_style_prefer_range_operator = true
csharp_style_prefer_tuple_swap = true
csharp_style_prefer_utf8_string_literals = true
csharp_style_throw_expression = true
csharp_style_unused_value_assignment_preference = discard_variable
csharp_style_unused_value_expression_statement_preference = discard_variable

# "using" 指令首选项
csharp_using_directive_placement = inside_namespace:warning

# 新行首选项
csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false
csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true
csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true
csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false
csharp_style_allow_embedded_statements_on_same_line_experimental = true

#### C# 格式规则 ####

# 新行首选项
csharp_new_line_before_catch = true
csharp_new_line_before_else = true
csharp_new_line_before_finally = true
csharp_new_line_before_members_in_anonymous_types = true
csharp_new_line_before_members_in_object_initializers = true
csharp_new_line_before_open_brace = all
csharp_new_line_between_query_expression_clauses = true

# 缩进首选项
csharp_indent_block_contents = true
csharp_indent_braces = false
csharp_indent_case_contents = true
csharp_indent_case_contents_when_block = true
csharp_indent_labels = no_change
csharp_indent_switch_labels = true

# 空格键首选项
csharp_space_after_cast = false
csharp_space_after_colon_in_inheritance_clause = true
csharp_space_after_comma = true
csharp_space_after_dot = false
csharp_space_after_keywords_in_control_flow_statements = true
csharp_space_after_semicolon_in_for_statement = true
csharp_space_around_binary_operators = before_and_after
csharp_space_around_declaration_statements = false
csharp_space_before_colon_in_inheritance_clause = true
csharp_space_before_comma = false
csharp_space_before_dot = false
csharp_space_before_open_square_brackets = false
csharp_space_before_semicolon_in_for_statement = false
csharp_space_between_empty_square_brackets = false
csharp_space_between_method_call_empty_parameter_list_parentheses = false
csharp_space_between_method_call_name_and_opening_parenthesis = false
csharp_space_between_method_call_parameter_list_parentheses = false
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
csharp_space_between_method_declaration_name_and_open_parenthesis = false
csharp_space_between_method_declaration_parameter_list_parentheses = false
csharp_space_between_parentheses = false
csharp_space_between_square_brackets = false

# 包装首选项
csharp_preserve_single_line_blocks = true
csharp_preserve_single_line_statements = false

#### 命名样式 ####

# 命名规则

dotnet_naming_rule.interface_should_be_begins_with_i.severity = warning
dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i

dotnet_naming_rule.types_should_be_pascal_case.severity = warning
dotnet_naming_rule.types_should_be_pascal_case.symbols = types
dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case

dotnet_naming_rule.method_should_be_pascal_case.severity = warning
dotnet_naming_rule.method_should_be_pascal_case.symbols = method
dotnet_naming_rule.method_should_be_pascal_case.style = pascal_case

# 符号规范

dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.interface.required_modifiers =

dotnet_naming_symbols.method.applicable_kinds = method
dotnet_naming_symbols.method.applicable_accessibilities = *
dotnet_naming_symbols.method.required_modifiers =

dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.required_modifiers =

# 命名样式

dotnet_naming_style.pascal_case.required_prefix =
dotnet_naming_style.pascal_case.required_suffix =
dotnet_naming_style.pascal_case.word_separator =
dotnet_naming_style.pascal_case.capitalization = pascal_case

dotnet_naming_style.begins_with_i.required_prefix = I
dotnet_naming_style.begins_with_i.required_suffix =
dotnet_naming_style.begins_with_i.word_separator =
dotnet_naming_style.begins_with_i.capitalization = pascal_case

[*.{appxmanifest,asax,ascx,aspx,axaml,axml,build,config,cs,cshtml,csproj,css,dbml,discomap,dtd,htm,html,jsproj,lsproj,master,njsproj,nuspec,paml,proj,props,razor,resw,resx,skin,StyleCop,targets,tasks,vb,vbproj,xaml,xamlx,xml,xoml,xsd}]
indent_style = space
indent_size = 4
tab_width = 4

其中XAML中Binding是会报警告的,设置如下即可。

1
2
resharper_xaml_binding_without_context_not_resolved_highlighting = none
resharper_xaml_binding_with_context_not_resolved_highlighting = none

注意

修改该配置不用重启VS,会立即生效。

图形化界面配置.editorconfig,这样保存时配置会保存到文件中。

image-20230517095145657

图形化界面方式配置

配置格式化规则

Options=>Code Editing=>C#=>Formatting Style

Line Breaks and Wrapping

这个是设置换行的,我的配置

image-20230426104040866

方法参数换行

image-20230517093054824

命名规则

Code Editing => C# => Naming Style

主要修改了

  • 属性不进行校验,很多类的属性是转JSON使用的,没必要首字母大写,所以就把这一项禁用了。
  • 常量无论是否私有都使用全大写的方式。

image-20230603120447058

自动清理

配置

Code Editing => Code Cleanup => General

image-20230217192525901

我这里只开启了变更地方的格式化,全文件格式化的话,如果代码行数太多会比较慢。

如果我们想整个文件格式化,可以点击Ctrl+Alt+F进行格式化。

image-20231124153609019

Code Editing => Code Cleanup => Profiles

我们可以设置其中的一个为默认的清理规则。

我这里是自定义了一个配置,开启了代码格式化和应用代码样式。

image-20231124155606716

我这里代码样式只开启了Apply 'var' styleArrange qualifiers

这个配置和 Code Editing => C# => Syntax Stype的配置是对应的。

卸载后注意事项

ReSharper安装后会修改一些原来的配置,卸载后注意修改过来。

会将选项——文本编辑器——C#——常规——自动列出成员 这个选择框的勾选去掉。

这样当你使用某个方法的时候,便不会提示参数,是一个很郁闷的事情。可以手动勾上。