在代码中使用“async void”时生成错误消息

问题描述 投票:0回答:2

有很多关于

async void
主题的问答。我们都同意这不是一件好事,我相信在所有情况下都是可以避免的。这就是为什么我想在使用时创建一个 Visual Studio 错误消息。

在其他情况下它是成功的,例如:当函数返回

Task
时,视觉工作室发出警告CS4014。我们使用 Directory.Build.props 机制将此警告的句柄配置为错误。这是它的代码:

<Project>
  <PropertyGroup>
    <WarningsAsErrors>CS4014</WarningsAsErrors>
  </PropertyGroup>
</Project>

如您所见,CS4014 被处理为错误。它工作正常。但是对于

async void
没有警告消息,这就是为什么我们不能配置为将其作为错误处理。

是否有任何方法可以将自定义错误/警告消息添加到

msbuild
构建过程?

创建自己的错误/警告消息在很多情况下会很有帮助。

c# visual-studio asynchronous async-await msbuild
2个回答
0
投票

有什么方法可以将自定义错误/警告消息添加到 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.


0
投票

提到的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 服务器上运行,无需任何进一步安装。

© www.soinside.com 2019 - 2024. All rights reserved.