Первоначальная проблема заключается в том, что у меня есть огромное решение, в котором проекты имеют разные параметры (например, конфигурация x64 или x86, разрешить небезопасный код или нет и т. Д.).
Я пытаюсь использовать Roslyn (2.9.0) для компиляции \ анализа этого решения с конфигурацией DEBUG x64. Компиляция некоторых проектов не удалась, поскольку следует использовать только «DEBUG x86».
Я создаю тестовое решение с конфигурацией DEBUG x64.
Project A is a console application (DEBUG x64).
Project B is a library (DEBUG x86)
и написание этого кода:
MSBuildLocator.RegisterDefaults();
_workspace = MSBuildWorkspace.Create(props);
_workspace.SkipUnrecognizedProjects = false;
_solution = _workspace.OpenSolutionAsync(solutionFilePath).Result;
var projectsGpaph = _solution.GetProjectDependencyGraph();
var projects = projectsGpaph.GetTopologicallySortedProjects();
Когда «реквизит» не установлен
_workspace. Диагностика пуста, и "проекты" имеют правильный порядок (библиотека, затем приложение)
B: project.CompilationOptions.Platform is AnyCpu
A: project.CompilationOptions.Platform is AnyCpu32BitPreferred
Когда «реквизит» установлен на
var props = new Dictionary<string, string>()
{
{"Configuration", "Debug"},
{"Platform", "x64"}
};
_workspace. Диагностика пуста, у "проектов" неправильный порядок:
A: project.CompilationOptions.Platform is X64
B: project.CompilationOptions.Platform is X64
и возникает исключение при выполнении «project.GetCompilationAsync (). Результат»:
System.ArgumentException: 'Reference of type
'Microsoft.CodeAnalysis.UnresolvedMetadataReference' is not valid for this
compilation.
Parameter name: references[0]'
Как заставить Roslyn учитывать настройки .sln \ .csproj?