Roslyn Analyzer Rule不会使构建失败

Obs*_*nix 8 c# analyzer roslyn visual-studio-2015

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

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

在声明"规则"字段的行中,您还可以将要生成的诊断的严重性更新为错误而不是警告.如果正则表达式字符串不解析,则Match方法肯定会在运行时抛出异常,您应该像编译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);
Run Code Online (Sandbox Code Playgroud)

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

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

代码捕获

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

Obs*_*nix 17

这是从VSIX文件运行的分析器的一项功能.

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

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

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

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