【问题标题】:Generate error message when "async void" is used in code在代码中使用“async void”时生成错误消息
【发布时间】:2020-07-16 15:20:18
【问题描述】:

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

在其他情况下它是成功的,例如:当函数返回 Task 时,Visual Studio 会发出警告 CS4014。我们使用Directory.Build.props 机制将此警告的句柄配置为错误。这是它的代码:

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

如您所见,CS4014 的处理方式类似于错误。它工作正常。但是对于async void,没有警告消息,这就是为什么我们不能配置为将其作为错误处理。

有没有办法在msbuild 构建过程中添加自定义错误/警告消息?

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

【问题讨论】:

  • async void 有一个用例,那就是事件处理程序。
  • 有了包装函数,你也可以处理这种情况
  • 您可以编写一个分析器来检测 async void,然后生成您自己的错误/警告

标签: c# visual-studio msbuild


【解决方案1】:

有什么方法可以将自定义错误/警告消息添加到 msbuild build 过程?

有一个名为 AsyncFixer 的 VS 扩展可以检测异步 void 方法。

但是,它只是将这些异步 void 方法转换为警告而不是错误。而且好像WarningsAsErrorsxml模式不适合它。

所以如果你仍然想把它们当作错误,我建议你可以在VS IDE中创建一个名为Production的新配置,然后将它们添加到Directory.Build.props中:

<Project>
 <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Production|AnyCPU'">
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

在这个配置中,它会将每个警告都视为错误,并且您很容易找到每个异步无效方法。(这是一个更好的功能,我已经针对您的问题进行了测试)。之后,您可以将配置更改回任何其他内容以构建您的项目。会的

更多关于这个功能,可以参考this related case

另外,如果还是不满意,请create an analyzer to detect Async Methods

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2019-06-18
    • 2010-11-10
    • 2011-12-12
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多