罗斯林获取所有解决方案项目参考



我正在使用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
}

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

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

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

Microsoft 生成公开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在引擎盖下所做的。但是,它仅支持两种处理缺失项目的行为:日志或引发异常。如果您希望为缺少的项目引发异常,请设置workspace.SkipUnrecognizedProjects = false;

最新更新