项目的 Roslyn 文档 return null

Roslyn Document of a Project return null

            string sln = path;

            MSBuildWorkspace workspace = MSBuildWorkspace.Create();
            Solution solution = workspace.OpenSolutionAsync(sln).Result;

            foreach (Project pro in solution.Projects)
            {
                
                foreach (Document documents in pro.Documents)
                {
                   
                    SyntaxNode rootNode = documents.GetSyntaxRootAsync().Result;
                    SemanticModel semanticModel = documents.GetSemanticModelAsync().Result;

                    IEnumerable<ClassDeclarationSyntax> myClasses = rootNode.DescendantNodes().OfType<ClassDeclarationSyntax>();
                    string pfad = documents.FilePath; .....

我想做的是加载一个解决方案及其项目和这些项目中的文档,然后我想获取这些文件的路径。前 2 个工作,但没有正在加载的文档。执行这段代码时,第二个 foreach 被完全跳过。调试显示documents为空

我见过其他项目使用这种类型的代码,但它不起作用,我也不知道为什么。点意味着有更多的代码,但那部分确实有效,所以我把它删掉了。如果有人有线索,你能添加到我的代码中吗?非常感谢!

pro.Documents 返回 null 的可能原因可能是因为:

  1. .NET 标准项目不受 MSBuild 工作区支持。如需更多信息,.
  2. 缺少 Nuget 包

Microsoft.Build

b. Microsoft.Build.Utilities.Core

如果上述 none 解决方案有效,那么您可以尝试使用 MSBuildWorkspace.WorkspaceFailed 事件处理程序自行调试。确保在调用 OpenSolutionAsync 方法之前订阅此事件。 Credits: Jason Malinowski