我尝试使用Microsoft提供的软件包构建一个简单的程序来进行静态代码分析。所以我想打开解决方案然后通过代码打开项目,然后获取所有文档并使用我的方法进行分析。
这是我的方法,我在其他地方打电话,我仔细检查了解决方案路径是否正确。您可以看到我使用的命名空间。
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Formatting;
using Microsoft.CodeAnalysis.MSBuild;
public class Fixer
{
public Fixer(string solutionPath)
{
using (var workspace = MSBuildWorkspace.Create())
{
_solution = workspace.OpenSolutionAsync(_solutionPath).Result;
}
}
}
之后我想
public IEnumerable<Document> GetDocuments(Solution solution)
{
foreach (var projectId in solution.ProjectIds)
{
var project = solution.GetProject(projectId);
foreach (Document document in project.Documents)
{
if (document.SupportsSyntaxTree)
yield return document;
}
}
}
public IEnumerable<MethodDeclarationSyntax> GetMethods(IEnumerable<Document> documents)
{
return documents.SelectMany(p => p.GetSyntaxRootAsync().Result.DescendantNodes().OfType<MethodDeclarationSyntax>());
}
主要问题是它根本不是开放的解决方案。当我检查工作区对象时。有诊断属性,并说
{[Failure] Cannot open project '.\RunningDiagnostics.csproj' because the language 'C#' is not supported.}
对于该解决方案中的所有项目。
我尝试更新我使用的nuget包。没啥事儿。主要问题是什么? 我们将非常感谢指导。
谢谢。