Roslyn workspace.OpenSolutionAsync()。项目总是空的?

时间:2014-07-31 23:00:49

标签: roslyn

我正在尝试创建一个自托管的WebAPI 2.0项目,允许您通过API打开/探索/构建.sln解决方案。

这是我的一个控制器中的代码,它应该返回给定.sln路径的项目列表:

public async Task<IHttpActionResult> GetProjects(string slnPath = "")
{
    var workspace = MSBuildWorkspace.Create();
    var solution = await workspace.OpenSolutionAsync(slnPath);
    var projects = solution.Projects;
}

我希望项目能够在解决方案中保存项目,但根据调试器,solution.Projectssolution.ProjectIds似乎总是空的。

我已尝试使用多个.sln文件,所有这些文件都可以在Visual Studio中打开,并看到它们中包含项目。

我见过this question,但我的项目不是Visual Studio插件,它是一个从命令行应用程序调用的类库。

2 个答案:

答案 0 :(得分:21)

这通常是由一些事情引起的,按照共性:

  1. 您缺少Microsoft.CodeAnalysis.CSharp.Workspaces.dll或Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll的副本。确保在运行项目时,这些DLL位于主Microsoft.CodeAnalysis.Workspaces.dll旁边。

  2. 您正在加载我们不支持的项目类型的解决方案。除了无项目的Web站点项目之外,我们应该支持任何项目类型。类库应该可以正常工作。

  3. 我们有一个错误导致我们错误处理您的特定项目类型。如果是这种情况,请在GitHub上提交错误。

答案 1 :(得分:3)

如果您在单元测试中遇到此问题但未在生产代码中出现此问题,请确保在测试项目中同时引用了Microsoft.CodeAnalysis.CSharp.Workspaces$page

JYL在所选答案的评论中提到了它,但我没有马上看到它。