Roslyn分析器规则不会导致构建失败。

11

在微软的这篇教程中,我创建了一个针对Roslyn的分析器。

根据该页面,您可以将规则标记为DiagnosticSeverity.Error,这将导致构建失败:

在声明Rule字段的行上,您还可以更新生成的诊断的严重性,使其成为错误而不是警告。如果正则表达式字符串无法解析,则Match方法肯定会在运行时引发异常,并且您应该像处理C#编译器错误一样阻止构建。将规则的严重性更改为DiagnosticSeverity.Error:

internal static DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Error, isEnabledByDefault: true, description: Description);

在我的代码中,我已经按照此处详细介绍的方式创建了规则:

private static readonly DiagnosticDescriptor Rule = 
  new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category,
  DiagnosticSeverity.Error, true, helpLinkUri: HelpUrl);

这个规则很有效。它会显示红色线并在错误列表中显示消息。但是,构建成功,我可以成功运行应用程序。

NB:我创建了这个规则来捕获Thread.Sleep的示例。

Code Capture

是否需要其他设置来确保规则会导致构建失败?

1个回答

24
这是VSIX文件中运行分析器的一个特性。
如果IDE安装的规则作为IDE构建的一部分运行,可能会导致IDE构建和命令行构建产生非常不同的输出。例如,安装了code-cracker作为VSIX的用户可能会因分析器错误(或者当项目使用/warnaserror时出现警告)而提交错误报告,说某个开源项目无法构建。他们将被迫卸载分析器扩展或修改项目使用的规则集以禁用仅存在于一位开发人员机器上的某些规则。
相比之下,通过NuGet安装的规则成为项目和构建的一部分。它们在开发人员机器上以相同的方式运行,在IDE、命令行和自动化构建环境中也是如此。
要使规则失败,您需要将分析器作为NuGet包添加到项目中。这将确保故障将导致构建按预期失败。 来源:IDE规则不会导致构建失败

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接