在命令行程序中使用自己的诊断程序

时间:2014-08-14 15:07:35

标签: c# roslyn

我正在编写命令行程序,旨在打开解决方案并扫描文档以查找错误和警告。我使用以下代码:

private static async void testDocument(Document document)
{
    var syntaxTree = await document.GetSyntaxTreeAsync();
    var semanticModel = await document.GetSemanticModelAsync();

    var diagnostics = syntaxTree.GetDiagnostics().Concat(semanticModel.GetDiagnostics());
    foreach (var diagnostic in diagnostics)
    {
        Console.WriteLine(diagnostic.ToString());
    }
}

这很好用,但我也希望输出从我自己编写的诊断中检测到的警告。它们位于使用" Diagnostic with Code Fix"创建的另一个项目中。模板。我怎么把这两件事放在一起?

2 个答案:

答案 0 :(得分:1)

创建Workspace时,请拨打HostServices的{​​{3}},然后传递包含overloadyour own host以及您自己的程序集:

MSBuildWorkspace.Create(
    ImmutableDictionary<string, string>.Empty,
    MefHostServices.Create(
        MefHostServices.DefaultAssemblies.Add(Assembly.Load(...))
    )
);

答案 1 :(得分:0)

一种选择是使用命令行中的Roslyn CSharp编译器。您可以使用自己的诊断程序dll传递/analyzer开关。

相关问题