我正在编写命令行程序,旨在打开解决方案并扫描文档以查找错误和警告。我使用以下代码:
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"创建的另一个项目中。模板。我怎么把这两件事放在一起?
答案 0 :(得分:1)
创建Workspace
时,请拨打HostServices
的{{3}},然后传递包含overload的your own host以及您自己的程序集:
MSBuildWorkspace.Create(
ImmutableDictionary<string, string>.Empty,
MefHostServices.Create(
MefHostServices.DefaultAssemblies.Add(Assembly.Load(...))
)
);
答案 1 :(得分:0)
一种选择是使用命令行中的Roslyn CSharp编译器。您可以使用自己的诊断程序dll传递/analyzer
开关。