Roslyn Analyzer规则不会使构建失败

继MS的本教程之后,我为Roslyn创建了一个分析器。

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

在声明“规则”字段的行中,您还可以将要生成的诊断的严重性更新为错误而不是警告。 如果正则表达式字符串不解析,Match方法肯定会在运行时抛出exception,您应该像编译C#编译器错误一样阻止构建。 将规则的严重性更改为DiagnosticSeverity.Error:

内部静态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); 

这条规则很好。 它会抛出红线,它会在错误列表中显示消息。 但是,构建成功,我能够成功运行该应用程序。

注意:我已创建此规则以捕获此示例的Thread.Sleep

代码捕获

是否需要额外的设置来确保规则中断构建?

这是从VSIX文件运行的分析器的一项function。

如果IDE安装的规则作为in-IDE构建的一部分运行,则会导致IDE构建和命令行构建具有可能非常不同的输出。 例如,安装了VSIX的代码破解程序的用户最终可能会提交一个错误报告,指出开源项目由于分析器错误而无法构建(或者当项目使用/ warnaserror时可能会发出警告)。 他们将被迫卸载分析器扩展或修改项目使用的规则集以禁用仅存在于一个开发人员的计算机上的某些规则。

相反,通过NuGet安装的规则将成为项目的一部分,并成为构建的一部分。 它们在开发人员计算机上以相同的方式运行,并且在IDE,命令行和自动构建环境中以相同的方式运行。

来源:IDE规则不会使构建失败

为了使规则的构建失败,您需要将分析器作为nuget包添加到项目中。 这将确保失败将导致构建按预期失败。