【问题标题】:Roslyn get all solution project referencesRoslyn 获取所有解决方案项目参考
【发布时间】:2018-04-14 18:21:42
【问题描述】:

我正在使用 Roslyn 来阅读这样一个解决方案的引用项目:

MSBuildWorkspace workspace = MSBuildWorkspace.Create();
workspace.LoadMetadataForReferencedProjects = true;
Solution solution = workspace.OpenSolutionAsync(Solution).Result;
foreach (var p in solution.Projects) {
   //do something with the project
}

问题在于解决方案变量不包含文件在本地不可用的项目。这意味着项目无法加载,因为文件丢失。

有没有办法获取所有项目引用,包括缺少项目文件的引用?

【问题讨论】:

    标签: c# roslyn


    【解决方案1】:

    有一种方法可以加载在 sln 文件中配置的所有项目。但是,它不是通过 roslyn。

    Microsoft Build 公开 Microsoft.Build.Construction.SolutionFile

    您可以通过多种方式获取项目,例如:

    SolutionFile solutionInfo = SolutionFile.Parse(@"/path-to-sln.sln");
    IEnumerable<ProjectInSolution> projectList = solutionInfo.ProjectsInOrder;
    

    从这里您可以使用workspace.OpenProjectAsync(project.AbsolutePath) 加载可用项目。 (注意,工作区是MSBuildWorkspace,项目是ProjectInSolution)。

    这实际上是 roslyn 通过MSBuildProjectLoader 在幕后所做的。但是,它只支持处理缺失项目的两种行为:log or throw exception。如果您想为丢失的项目抛出异常,请设置workspace.SkipUnrecognizedProjects = false;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多