Рабочее пространство Roslyn.OpenSolutionAsync(). Проекты всегда пусты?
Я пытаюсь создать самостоятельный проект WebAPI 2.0, который позволяет вам открывать/исследовать/строить .sln-решения через API.
Здесь код внутри одного из моих контроллеров, который должен возвращать список проектов с указанием пути к .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 и видеть, что у них есть проекты.
Я видел этот вопрос, но мой проект не добавлен в Visual Studio, это библиотека классов, вызванная из приложения командной строки.
Ответы
Ответ 1
Это обычно вызвано одной из нескольких вещей в порядке общности:
-
Вам не хватает копий Microsoft.CodeAnalysis.CSharp.Workspaces.dll или Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll. Убедитесь, что при запуске вашего проекта эти DLL находятся рядом с основным Microsoft.CodeAnalysis.Workspaces.dll.
-
Вы загружаете решения с типами проектов, которые мы не поддерживаем. Мы должны поддерживать любой тип проекта, за исключением проектов без проекта. Библиотеки классов должны работать нормально.
-
У нас есть ошибка, которая заставляет нас неправильно обрабатывать ваши типы проектов. Если это произойдет, напишите ошибку на GitHub.
Ответ 2
Если вы получаете эту проблему в модульных тестах, но не в своем производственном коде, убедитесь, что вы указали как Microsoft.CodeAnalysis.CSharp.dll
, так и Microsoft.CodeAnalysis.CSharp.Workspaces
в своем тестовом проекте.
JYL упомянул об этом в комментариях выбранного ответа, но я не сразу его видел.