以编程方式运行 Roslyn 分析时启用 Roslyn 诊断

Mik*_*nen 3 unit-testing mstest roslyn roslyn-code-analysis

我已经使用 VS 2015 模板创建了一个 Roslyn 分析器。鉴于默认情况下启用了诊断,我已经让一切正常工作,包括单元测试。

如果我设定的isEnabledByDefault参数上DiagnosticDescriptor,以false我能得到的一切使用使诊断在Visual Studio中的工作.ruleset文件。但是,一旦默认禁用诊断,单元测试将不再报告其结果。

如何在单元测试期间启用这些默认禁用的诊断?我准备改变单元测试调用 Roslyn Compilation/Analyzer/Diagnostic/等的方式。结果,但由于缺乏我设法从各种来源抓取的文档,我还没有找到指定设置的方法。

Tie*_*ies 5

您需要覆盖类似于规则文件的诊断严重性,CompilationOptions.SpecificDiagnosticOptions允许(编译具有Options可以覆盖类似的内容)。

我已经成功地将我的分析器更改为禁用状态,并覆盖了我的宠物项目中的DiagnosticVerifier.Helper(in Helpers)(有关我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);
}
Run Code Online (Sandbox Code Playgroud)

您可能希望VerifyCSharpDiagnostic根据单元测试的要求添加一个标志来执行此操作。