有很多关于
async void
主题的问答。我们都同意这不是一件好事,我相信在所有情况下都是可以避免的。这就是为什么我想在使用时创建一个 Visual Studio 错误消息。
在其他情况下它是成功的,例如:当函数返回
Task
时,视觉工作室发出警告CS4014。我们使用 Directory.Build.props 机制将此警告的句柄配置为错误。这是它的代码:
<Project>
<PropertyGroup>
<WarningsAsErrors>CS4014</WarningsAsErrors>
</PropertyGroup>
</Project>
如您所见,CS4014 被处理为错误。它工作正常。但是对于
async void
没有警告消息,这就是为什么我们不能配置为将其作为错误处理。
是否有任何方法可以将自定义错误/警告消息添加到
msbuild
构建过程?
创建自己的错误/警告消息在很多情况下会很有帮助。
有什么方法可以将自定义错误/警告消息添加到 msbuild build 过程?
有一个名为 AsyncFixer 的 VS 扩展,可以检测异步无效方法。
但是,它只是将这些 async void 方法转换为警告而不是错误。而且似乎
WarningsAsErrors
xml 模式不适合它。
所以如果您仍然想将它们视为错误,我建议您可以在 VS IDE 中创建一个名为
Production
的新配置,然后将它们添加到 Directory.Build.props
:
<Project>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Production|AnyCPU'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>
在这个Configuration中,它会将每个警告都视为错误,并且您很容易找到每个async void方法。 (这是一个更好的功能,我已经针对您的问题进行了测试)。之后,您可以将 Configuration 更改回任何其他内容以构建您的项目。它会
更多关于这个功能,可以参考这个相关案例。
另外,如果还是不能满足你,你应该create an analyzer to detect Async Methods.
提到的AsyncFixer扩展和Nuget包在处理异步代码时非常有用。他们都打包了一个 Roslyn 分析器,可以检测许多异步问题,并在大多数情况下为它们提供自动修复。
使用 Visual Studio 中的
.editorconfig
,您可以将特定警告配置为错误:
[*.cs]
# AsyncFixer03: Fire-and-forget async-void methods or delegates
dotnet_diagnostic.AsyncFixer03.severity = error
如果您已将 AsyncFixer 添加为 nuget 包,则可以直接从解决方案资源管理器进行设置:
通过将扩展添加为 nuget 包,它还可以自动在任何构建代码的 CI 服务器上运行,无需任何进一步安装。