MSBuildWorkspace.OpenSolutionAsync (solutionPath) не удается скомпилировать из-за несоответствия архитектуры процессора - PullRequest
0 голосов
/ 31 мая 2019

В Visual Studio 2017 я создал проект автономного инструмента для анализа кода, нацеленный на 4.6.2.Я использовал шаблонный код как есть, за исключением того, что я указал файл .sln для рабочей области. Вызов OpenSolutionAsync ().

Решение, которое я пытаюсь скомпилировать с помощью этого метода Roslyn, содержит оба проекта, где Platform = Any CPUи проекты, где Platform = x64.Решение прекрасно компилируется в VS2017, когда установлено значение Mixed Platforms.

Однако вызов OpenSolutionAsync () генерирует несколько из следующих ошибок компиляции:


Ошибка Msbuild при обработке файла«C: \ MyProj.csproj» с сообщением: C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets: (2110, 5): былонесоответствие между процессорной архитектурой строящегося проекта "MSIL" и процессорной архитектурой из ссылок "C: \ MyUnmanagedLibrary.dll", "x86".Это несоответствие может привести к сбоям во время выполнения.Рекомендуется изменить архитектуру целевого процессора вашего проекта с помощью Configuration Manager, чтобы согласовать архитектуры процессора между вашим проектом и ссылками, или взять зависимость от ссылок с архитектурой процессора, которая соответствует архитектуре целевого процессора вашего проекта.


Почему он жалуется на x86, когда проект MyUnmanagedLibrary настроен для сборки с использованием Platform = x64 в Configuration Manager?Как мне решить это?Этот код работал нормально один день назад, и, насколько мне известно, ничего не изменилось, за исключением того, что я скопировал код в другой каталог на моем компьютере.

1 Ответ

2 голосов
/ 31 мая 2019

Причиной такого поведения было то, что некоторые из моих проектов имели выходной путь bin \ Debug \, а другие - выходной путь bin \ x64 \ Debug.Однако процесс сборки, выполняемый при вызове OpenSolutionAsync (), предполагает наличие bin \ Debug.Он находил старые версии библиотек DLL x86 в папках bin \ Debug \, а не просматривал библиотеки DLL в папках bin \ 64 \ Debug \.Как только я изменил пути вывода всех проектов на bin \ Debug \, процесс OpenSolutionAsync () работал нормально.

...