我正在尝试创建一个自托管的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.Projects
和solution.ProjectIds
似乎总是空的。
我已尝试使用多个.sln
文件,所有这些文件都可以在Visual Studio中打开,并看到它们中包含项目。
我见过this question,但我的项目不是Visual Studio插件,它是一个从命令行应用程序调用的类库。
答案 0 :(得分:21)
这通常是由一些事情引起的,按照共性:
您缺少Microsoft.CodeAnalysis.CSharp.Workspaces.dll或Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll的副本。确保在运行项目时,这些DLL位于主Microsoft.CodeAnalysis.Workspaces.dll旁边。
您正在加载我们不支持的项目类型的解决方案。除了无项目的Web站点项目之外,我们应该支持任何项目类型。类库应该可以正常工作。
我们有一个错误导致我们错误处理您的特定项目类型。如果是这种情况,请在GitHub上提交错误。
答案 1 :(得分:3)
如果您在单元测试中遇到此问题但未在生产代码中出现此问题,请确保在测试项目中同时引用了Microsoft.CodeAnalysis.CSharp.Workspaces
和$page
。
JYL在所选答案的评论中提到了它,但我没有马上看到它。