Coding style 在Roslyn中以编程方式访问代码分析结果
我正在构建一个分析C#代码片段并提供一些反馈的工具。我用Coding style 在Roslyn中以编程方式访问代码分析结果,coding-style,roslyn,code-analysis,programmatically,Coding Style,Roslyn,Code Analysis,Programmatically,我正在构建一个分析C#代码片段并提供一些反馈的工具。我用 tree=CSharpSyntaxTree.ParseText(codeSample) 获取一个SyntaxTree,然后 semanticModel=compilation.GetSemanticModel(树) 获取语义模型 我可以通过semanticModel.Compilation.GetDiagnostics()在代码中找到语法错误但我知道Roslyn也可以使用 我的问题是:如何以编程方式在代码中获得这些代码样式问题,就像我可以
tree=CSharpSyntaxTree.ParseText(codeSample)代码>
获取一个SyntaxTree,然后
semanticModel=compilation.GetSemanticModel(树)代码>
获取语义模型
我可以通过semanticModel.Compilation.GetDiagnostics()在代码中找到语法错误
但我知道Roslyn也可以使用
我的问题是:如何以编程方式在代码中获得这些代码样式问题,就像我可以获得语法错误一样?解决方案:
首先,您必须加载CodeAnalysis.dll
,并从中获取分析器:
var assembly = Assembly.LoadFrom(@"Microsoft.CodeAnalysis.NetAnalyzers.dll");
var analyzers = assembly.GetTypes()
.Where(t => t.GetCustomAttribute<DiagnosticAnalyzerAttribute>() is object)
.Select(t => (DiagnosticAnalyzer)Activator.CreateInstance(t))
.ToArray();
之后,您可以使用以下工具获得代码分析结果:
var analyzerDiagnostics = (await compilationWithAnalyzers.GetAllDiagnosticsAsync()).ToList();
如何创建编译?@PauloMorgado如下所示:var compilation=csharpcomilation.Create(“assemblyName”).AddReferences(MetadataReference.CreateFromFile(typeof(object.Assembly.Location)).AddSyntaxTrees(tree);我现在不能测试,但是有wit分析器
方法。你找不到吗?谢谢。我设法使它起作用。我会补充一个答案。
var analyzerDiagnostics = (await compilationWithAnalyzers.GetAllDiagnosticsAsync()).ToList();