Как я могу построить детерминистически с Visual Studio и MSBuild? - PullRequest
0 голосов
/ 03 мая 2020

Я достиг точки, где я могу повторить сборку в Visual Studio 2019 и получить определенную c сборку ... и то же самое, что и при сборке в командной строке с использованием MSBuild v16. К сожалению, сборка, которая выводится при сборке с использованием VS2019, отличается от сборки при использовании MSBuild.

Я понимаю концепцию процесса сборки defineisti c, наряду с множеством факторов, учитываемых компилятором когда он делает свой выбор. Что мне нужно сделать, так это выяснить, что именно Visual Studio делает во время процесса компиляции, чтобы я мог выполнять репликацию с использованием MSBuild. Из того, что я видел, Visual Studio обходит MSBuild и идет прямо к компилятору (что не делает это легче).

Кто-нибудь пытался это сделать и имел успех с этим? Может быть, вы попытались и отказались? Ответы на оба вопроса одинаково полезны.

Заранее спасибо.

1 Ответ

0 голосов
/ 05 мая 2020

Как детерминистически построить как с Visual Studio, так и с MSBuild?

На самом деле , чтобы построить C# проектов, вызов VS IDE MSBuild для создания проектов. VS IDE вызывает MSBuild для сборки проекта, что само по себе согласуется с MSBuild, скомпилированным через командную строку. MSBuild существует в папке C:\Program Files (x86)\Microsoft Visual Studio\2019\xxxx\MSBuild\Current\Bin в папке VS2019.

Просто VS IDE объединяет множество инструментов. Если вы установите некоторые расширения или инструменты, связанные со сборкой в ​​VS IDE, это может повлиять на окончательную сборку. MSBuild (командная строка) - это чистый инструмент компиляции, VS IDE вызовет его для сборки.

---------------------- -----

Сначала , интересно, если вы используете VS IDE и ее Командная строка разработчика для VS (существует под VS2019 IDE) строить свои проекты отдельно. Если это так, я думаю, вы должны убедиться, что аргументы командной строки соответствуют параметрам сборки в VS IDE.

Сначала отключите сторонние расширения в разделе Расширения . -> Управление расширениями в случае, если они влияют на MSBuild в VS IDE.

Затем убедитесь, что при сборке ваших проектов вам следует обратить внимание на Configuration (Debug или Release) или Платформа (x64, x86 или Any CPU) всех проектов.

Затем вы должны сделать это в командной строке MSBuild:

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx

Убедитесь, что инструкции по сборке соответствуют.

----------------------- ---

Секунда , когда вы используете Build Tool для VS2019 в другом агенте (его можно установить отдельно без VS IDE), и если это так, вы должны убедиться, что его версия такая же, как VS IDE. (версия Build Tool v16.xxx такая же, как версия VS IDE v16.xxx), и разные версии MSBuild будут иметь немного разные сборки, поэтому будьте последовательны.

На самом деле , MSBuild строит c # проектов, используя cs c .exe для компиляции файлов, поэтому оба VS IDE и MSBuild совместимы для файлов c#. Нет проблем с различными компиляторами, использующими csc.

Кроме того, , чтобы увидеть более детально: вы можете просмотреть подробный журнал сборки следующим образом:

В VS IDE :

Tools -> Options -> Projects and Solutions -> Build and Run -> установить MSBuild project build output verbosity в Detailed.

В MSBuild :

msbuild xxxx.csproj -t:build -p:Configuration=xxx -p:Platform=xxx -v:detailed
...