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

时间:2016-11-29 23:23:03

标签: unit-testing mstest roslyn roslyn-code-analysis

我使用VS 2015模板创建了一个Roslyn分析器。鉴于默认情况下启用了诊断功能,我已经完成了所有工作,包括单元测试。

如果我将isEnabledByDefault上的DiagnosticDescriptor参数设置为false,我可以通过使用.ruleset文件启用诊断来使Visual Studio中的所有内容都正常工作。但是,默认情况下禁用诊断后,单元测试将不再报告其结果。

如何在单元测试期间启用这些默认的禁用诊断?我准备改变单元测试调用Roslyn编译/分析器/诊断/等的方式。结果,但我没有找到一种方法来指定设置,因为我已经设法从各种来源中删除了文档。

1 个答案:

答案 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添加一个标记,以便在单元测试请求时执行此操作。