Coding style 在Roslyn中以编程方式访问代码分析结果

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也可以使用 我的问题是:如何以编程方式在代码中获得这些代码样式问题,就像我可以

我正在构建一个分析C#代码片段并提供一些反馈的工具。我用

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();