Указать файл проекта с помощью msbuild

Мне нужна командная строка для создания конкретного проекта решения с использованием msbuild, как мы делаем с devenv.com. В devenv.com мы можем указать проект решения, используя следующую команду

devenv.com /Build Release|x86 test.sln /project "testproject"

Используя приведенную выше командную строку, я могу построить testproject в test.sln, используя devenv.com. Какова командная строка для msbuild для того же решения.

Спасибо

Ответ 1

msbuild test.sln /t:project /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

Обратите внимание, что в /t назначено имя проекта в решении, оно может отличаться от имени файла проекта.

Кроме того, как указано в разделе Как создать конкретные цели в решениях с помощью MSBuild.exe:

Если имя проекта содержит любой из символов %, $, @ ; . , (, ) или ', замените их на _ в указанном целевом имени.

Вы также можете создать несколько проектов одновременно:

msbuild test.sln /t:project;project2 /p:Configuration="Release" /p:Platform="x86" /p:BuildProjectReferences=false

Чтобы восстановить или очистить, измените /t:project на /t:project:clean или /t:project:rebuild

Ответ 2

MSBuild фактически работает с использованием проектов, а не решений. Решение используется только для его синтаксического анализа во временном файле проекта в MSBuild. Вы должны просто создать проект, представляющий интерес, непосредственно через MSBuild, выполнив следующую команду.

"msbuild testproject /p:Configuration=Release /p:Platform=x86"

Есть одна важная проблема, которую я знаю, что вы можете использовать проект напрямую, а не решение: если вы используете решение для выражения зависимостей между проектами, вместо добавления ссылок на проект и обеспечения возможности разработки системы сборки зависимостей автоматически.

Если вы выполняете заказ сборки, используя файл sln, я рекомендую использовать эти зависимости непосредственно в файлах proj и удалять их из sln. Это позволит вам напрямую ссылаться на любой файл proj из MSBuild, и все проекты будут создаваться независимо без какой-либо дополнительной работы. Вы действительно должны относиться к sln файлу как к группе проектов, чтобы упростить работу в Visual Studio, а не как встраивание.

Ответ 3

Публикация информации будущим искателям

Добавьте в конструкцию script следующую команду и запустите ее один раз. Это создаст точные цели и другую информацию, которую будет использовать msbuild.

Пример: если у вас есть . в имени проекта или папках msbuild будет ожидать _ вместо ..

set MSBuildEmitSolution=1

После получения информации обновите сборку script с необходимой информацией.

Ответ 4

Просто чтобы добавить дополнительную информацию, выполнение msbuild в папке проекта по умолчанию создаст файл проекта, поскольку он там единственный.

>msbuild

Существует множество вариантов использования msbuild таким способом. Вы можете указать proj файл напрямую.

>msbuild helloworld.csproj -t:Build.

Ознакомьтесь с документацией по msbuild для использования, требованиями к файлам proj, а также преимуществами сборки проекта вместо решения.

MS MSBuild Документация

Есть преимущества для построения этого пути, как упомянуто Марк-Смит выше.

Ответ 5

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

Один из способов выяснить это - использовать MSBuild против вашей SLN с намеченными параметрами после установки для специальной переменной среды MSBuildEmitSolution значения 1.

set MSBuildEmitSolution=1
msbuild my_stuff.sln /t:rebuild /p:Configuration=Release /p:Platform=x64

Я недавно должен был сделать это из-за очень определенного имени для цели во вложенных каталогах. Итак, из моего сгенерированного файла my_stuff.sln.metaproj я нашел my_stuff.sln.metaproj строку:

<Target Name="Utils\Firewall\FirewallUtils:Rebuild">

Это означает, что командная строка для использования в конечном итоге,

msbuild my_stuff.sln /t:Utils\Firewall\FirewallUtils:Rebuild /p:Configuration=Release /p:Platform=x64