我使用VS 2015模板创建了一个Roslyn分析器。鉴于默认情况下启用了诊断功能,我已经完成了所有工作,包括单元测试。
如果我将isEnabledByDefault
上的DiagnosticDescriptor
参数设置为false
,我可以通过使用.ruleset
文件启用诊断来使Visual Studio中的所有内容都正常工作。但是,默认情况下禁用诊断后,单元测试将不再报告其结果。
如何在单元测试期间启用这些默认的禁用诊断?我准备改变单元测试调用Roslyn编译/分析器/诊断/等的方式。结果,但我没有找到一种方法来指定设置,因为我已经设法从各种来源中删除了文档。
答案 0 :(得分:3)
您需要覆盖类似于规则文件的诊断严重性,
CompilationOptions.SpecificDiagnosticOptions
允许(编译有Options
可以覆盖这样的东西)。
我已成功将我的分析器更改为禁用,并在我的宠物项目中覆盖DiagnosticVerifier.Helper
(在Helpers
中)(请参阅commit 8dfc02c
,了解我是如何做到的)。基本上,它归结为:
private static Compilation OverrideDiagnosticSeverity(
Compilation compilation,
string diagnosticId,
ReportDiagnostic reportDiagnostic)
{
var compilationOptions = compilation.Options;
var specificDiagnosticOptions = compilationOptions.SpecificDiagnosticOptions;
specificDiagnosticOptions = specificDiagnosticOptions.Add(diagnosticId, reportDiagnostic);
var options = compilationOptions.WithSpecificDiagnosticOptions(specificDiagnosticOptions);
return compilation.WithOptions(options);
}
您可能需要向VerifyCSharpDiagnostic
添加一个标记,以便在单元测试请求时执行此操作。