继从this来自 MS 的教程,我为 Roslyn 创建了一个分析器。
根据页面,您可以将规则标记为DiagnosticSeverity.Error
,这将导致构建中断:
在声明规则字段的行中,您还可以将要生成的诊断的严重性更新为错误而不是警告。如果正则表达式字符串无法解析,则 Match 方法肯定会在运行时抛出异常,并且您应该像处理 C# 编译器错误一样阻止构建。将规则的严重性更改为 DiagnosticSeverity.Error:
内部静态诊断描述符规则 =
新的 DiagnosticDescriptor(DiagnosticId, 标题, MessageFormat,
类别,DiagnosticSeverity.Error,isEnabledByDefault:true,描述:描述);
在我的代码中,我或多或少创建了如下详细规则:
private static readonly DiagnosticDescriptor Rule =
new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category,
DiagnosticSeverity.Error, true, helpLinkUri: HelpUrl);
这条规则运作良好。它会抛出红线,并在错误列表中显示消息。但是,构建成功,并且我能够成功运行该应用程序。
NB:我创建了这个规则来捕获Thread.Sleep
对于这个例子。
是否需要额外的设置来确保规则破坏构建?
这是从 VSIX 文件运行的分析器的一项功能。
如果 IDE 安装的规则作为 IDE 内构建的一部分运行,则将导致 IDE 构建和命令行构建具有可能非常不同的输出。例如,作为 VSIX 安装了代码破解器的用户最终可能会提交一份错误报告,指出开源项目由于分析器错误而无法构建(或者在项目使用 /warnaserror 时可能会出现警告)。他们将被迫卸载分析器扩展或修改项目使用的规则集以禁用仅存在于一名开发人员计算机上的某些规则。
相反,通过 NuGet 安装的规则成为项目和构建的一部分。它们在开发人员计算机上以相同的方式运行,并且在 IDE、命令行和自动化构建环境中以相同的方式运行。
来源:IDE 规则不会导致构建失败
为了使构建针对规则失败,您需要将分析器作为 nuget 包添加到项目中。这将确保失败将导致构建按预期失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)