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

3
我使用 VS 2015 模板创建了一个 Roslyn 分析器。如果诊断默认启用,一切都可以正常运行,包括单元测试。如果我将DiagnosticDescriptor 上的 isEnabledByDefault 参数设置为 false ,则可以通过使用 .ruleset 文件在 Visual Studio 中启用诊断工具。但是,一旦默认禁用诊断工具,单元测试将不再报告其结果。我该如何在单元测试期间启用这些未默认启用的诊断工具呢?我准备更改单元测试调用 Roslyn Compilation/Analyzer/Diagnostic 等结果的方式,但是鉴于我从各种来源获取到的文档有限,因此找不到指定设置的方法。
1个回答

5
您需要覆盖与规则文件类似的诊断严重性,使用CompilationOptions.SpecificDiagnosticOptions可以实现(编译有Options,可以覆盖此类内容)。
我已经成功地将我的分析器更改为禁用,并覆盖了我的小型项目中的DiagnosticVerifier.Helper(在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);
}

您可能希望在单元测试的请求下向 VerifyCSharpDiagnostic 添加一个标志来执行此操作。


1
完美运作!谢谢!我本来以为这又是一个太过具体的问题,不会得到任何答案。很高兴被证明是错误的。 :) - Mikko Rantanen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接