Как мне собрать существующее решение с помощью roslyn и разрешить все ссылки в csproj, чтобы я мог разрешить все типы - PullRequest
3 голосов
/ 11 марта 2019

У меня есть решение, которое строится по сравнению с Когда я загружаю его с Roslyn, как это:

var workspace = MSBuildWorkspace.Create();
var solutionPath = @"c:\path\to\my.sln";
var solution = workspace.OpenSolutionAsync(solutionPath).Result;

тогда все проекты имеют 0 ссылок на метаданные.

Если я попытаюсь получить тип из ссылочной сборки, как это:

var compilation = solution.Projects.First().GetCompilationAsync().Result;
var myType = compilation.GetTypeByMetadataName("SomeTypeNanme);

никогда не находит тип. Если я добавлю ссылки на метаданные вручную, как это:

var project = project.AddMetadataReference(AssemblyContaningTheType);

Тогда он может найти тип.

Мое решение предназначено для .NET Framework 4.5.2, на случай, если это имеет значение

Является ли это единственным способом разрешения ссылок, то есть добавления ссылок на метаданные вручную? Разве это не может быть сделано из-за того, что все ссылки находятся в csproj? Как я могу узнать, что все ссылки, которые мне нужно добавить?

В идеале я хотел бы, чтобы ссылки разрешались автоматически, но было бы неплохо использовать указатели для построения всех необходимых ссылок на метаданные из информации в файлах проекта ...

1 Ответ

0 голосов
/ 13 марта 2019

Насколько я могу судить, это может быть связано с этой проблемой , или, возможно, этой , что приводит к этой открытой заявке .

Цитируя последний

Пустые метаданныеСсылки для проекта, ссылающегося на другой проект из того же решения

Используемая версия: 2.7.0

Шаги для воспроизведения:

  1. Создание решения с двумя проектами, A и B
  2. Ссылка проекта B на проект A
  3. Откройте проект A, используя этот код:

    var workspace = MSBuildWorkspace.Create (дополнительные свойства);

    Project project = workspace.OpenProjectAsync (projectPath) .Result;

Ожидаемое поведение:

project.MetadataReferences должно содержать ссылки на проекты, такие как mscorlib.dll

Фактическое поведение:

project.MetadataReferences пусто.

...