Указать файл проекта с помощью 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