Roslyn Analyzer Rule不会使构建失败

时间:2016-09-23 09:42:13

标签: c# visual-studio-2015 roslyn analyzer

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

根据该页面,您可以将规则标记为private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Error, true, helpLinkUri: HelpUrl); ,这将导致构建中断:

  

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

     

内部静态DiagnosticDescriptor规则=   新的DiagnosticDescriptor(DiagnosticId,Title,MessageFormat,   Category,DiagnosticSeverity.Error,isEnabledByDefault:true,description:Description);

在我的代码中,我已经或多或少地创建了规则,如下所示:

Thread.Sleep

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

NB:我已创建此规则以捕获此示例中的user+='<form met....

Code Capture

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

1 个答案:

答案 0 :(得分:17)

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

  

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

     

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

Source: IDE rules don't fail builds

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