当异步方法未以“异步”结尾时,如何在Visual Studio中得到警告?


70

每当我创建不以“异步”结尾的异步方法时,如何使Visual Studio发出命名警告?

这是异步方法的推荐约定,但我经常发现自己忘了添加后缀,并且警告会很有用。


19
异步代码现在无处不在,除非您同时拥有两个版本,否则我不再认为它是一种实践。
Adrian Iftode

3
“这是异步方法的推荐约定”是吗?现在,这是一种假设。
亚历山大

1
我们只能使用Visual Studio文本编辑器配置或.editorconfig文件来进行操作,仅限于警告带有async修饰符的方法,而不能将规则应用于return的方法Task
Reza Aghaei

3
@ rory.ap不,我建议异步调用现在如此普遍,以至于不需要特殊处理。您自然会考虑检查一个方法所属的类,其返回类型是什么,等等。然而,我们不会用方法所属的类或它们的arg和返回类型分别注释方法名称。我的意思是要给异步相同的待遇。当您学习如何使用函数时,只是检查函数中的“其中之一”,而无需在名称中显式地对其进行调用。
亚历山大

1
希望...Async以该名称使用匈牙利表示法!
套件

Answers:


91

选项中

  • 转到文本编辑器基本代码样式→命名
  • 选择管理规范添加新规范
  • 选择“方法”,勾选所有辅助功能选项,然后从“修饰符”中选择“异步”
  • 将标题命名为“异步方法”并保存
  • 现在进入“管理命名样式”并添加“新样式”。添加Async作为后缀,并将其命名为AsyncSuffix,然后保存
  • 现在按加号并创建新的命名。选择规范作为异步方法,选择所需的样式作为AsyncPostfix和严重性作为建议器
  • 点击OK保存

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明


3
尽管获得了所有这些支持,但看不到它对我如何起作用。没有建议,警告,错误-没什么
Kamarey

应用此规则后,@ Kamarey。请尝试关闭您的编辑器,将其重新打开,然后删除其中一个不带异步后缀的异步方法,然后再次尝试添加。它将开始工作,您也可以考虑将严重性更改为“警告”。
德尔维什Kayımbaşıoğlu

这不会捕获不使用修饰符的异步方法(即returnTask但不直接等待)。
理查德

1
我的经验:命名规则适用于方法,但当在接口上声明该方法时它将不起作用。 gist.github.com/arthg/c46cb81921f8930d6e4c83858f198897
亚瑟

31

除了Visual Studio文本编辑器设置,您还可以创建可移植的自定义编辑器设置.editorconfig文件。Visual Studio 2017本机支持.editorconfig文件。

通过将.editorconfig文件作为存储库的一部分创建并将其推送到存储库,您可以为在该代码库中工作的每个人实施一致的编码样式,无论其Visual Studio文本编辑器设置如何。

您在个人项目中使用的编码约定可能与团队项目中使用的编码约定不同。EditorConfig文件通过使您能够为每个方案进行配置来解决此问题。

EditorConfig设置优先于全局Visual Studio文本编辑器设置。

为此:

  1. 在“解决方案资源管理器”中,根据要应用命名规则的范围,选择“解决方案”,“项目”或项目中的文件夹。

  2. 右键单击并选择添加新项或按Ctrl+ Shift+A

  3. 常规类别中选择文本文件文件,然后输入作为文件名。.editorconfig

注意:文件位置甚至可以位于解决方案的父文件夹中。不必在解决方案中使用它。

将以下内容粘贴到文件中:

# Top-most EditorConfig file
root = true

[*.{cs,vb}]

# Async methods should have "Async" suffix
dotnet_naming_rule.async_methods_end_in_async.symbols = any_async_methods
dotnet_naming_rule.async_methods_end_in_async.style = end_in_async
dotnet_naming_rule.async_methods_end_in_async.severity = suggestion

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

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

更多信息:


1
我发现实际上,您不需要“添加新项”,您只需要将.editorconfig文件拖放到与文件相同的目录中.sln,即可对其进行检测。
杰兹

1
文件的位置甚至可以在你的解决方案的父文件夹。不必将其放在解决方案文件夹结构中。放入项目结构只是为了使其在VS中可用以对其进行编辑。
Reza Aghaei
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.