Как вы автоматизируете сборку Visual Studio?

Как превратить сборку Visual Studio, которую вы выполняете в IDE, в сценарий, который можно запустить из командной строки?

11 ответов

Решение

С VS2008 вы можете сделать это:

devenv solution.sln /build configuration
\Windows\Microsoft.NET\Framework\[YOUR .NET VERSION]\msbuild.exe

Много параметров командной строки, но самый простой из них:

msbuild.exe yoursln.sln

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

Он основан на DevEnv.exe, так как он работает, если у вас есть проект установки в вашей сборке (msbuild не поддерживает сборку проектов установки).

Я предполагаю, что ваша установка - 32-битная Windows 7 с установкой Visual Studio 2010 с использованием собственного компилятора x86 и кросс-компилятора x64. Если вы используете 64- битные окна, вам может потребоваться изменить x86_amd64 на amd64 в пакетном скрипте в зависимости от ваших настроек. Это предполагает, что Visual Studio установлен в Program Files, а ваше решение находится в D:\MySoln

Создайте файл с именем buildall.bat и добавьте в него:

D:
cd "D:\MySoln"

if "%1" == "" goto all
if %1 == x86 goto x86
if %1 == x64 goto x64

:x86
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
goto eof

:x64
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
goto eof

:all
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 < crosscompilex86.bat
if %ERRORLEVEL% NEQ 0 goto eof
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86_amd64 < crosscompilex64.bat
goto eof

:eof
pause

Теперь создайте еще 2 пакетных сценария:

crosscompilex86.bat для сборки версии выпуска сборки x86 и включения этой

devenv MySoln.sln /clean "Release|x86"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
devenv MySoln.sln /rebuild "Release|x86"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%

crosscompilex64.bat для сборки версии выпуска сборки x64 и включения этой

devenv MySoln.sln /clean "Release|x64"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%
devenv MySoln.sln /rebuild "Release|x64"
IF %ERRORLEVEL% NEQ 0 EXIT /B %ERRORLEVEL%

Теперь поместите все 3 пакетных файла в папку с решением вместе с MySoln.sln. Вы можете создавать версии x86 и x64 Release, создав ярлык на рабочем столе, который запускает следующие команды:

  • Build All -> D:\MySoln \ buildall.bat
  • Build x86 Release Only -> D:\MySoln \ buildall.bat x86
  • Build x64 Release Only -> D:\MySoln \ buildall.bat x64

Если вы используете другую конфигурацию, такую ​​как AnyCPU и т. Д., Вам необходимо соответствующим образом настроить вышеуказанные сценарии.

NAnt и MSBuild являются наиболее популярными инструментами для автоматизации вашей сборки в .NET, и вы можете найти обсуждение плюсов и минусов каждого из них в вопросе о переполнении стека. Лучший инструмент для сборки.NET.

Самый простой способ: перейдите в каталог, содержащий файл решения или проекта, и запустите msbuild (при условии, что у вас Visual Studio 2005 или новее).

Более гибкие способы:

  • Читайте на ссылку MSBuild. Существует множество настроек, особенно после установки проекта MSBuild Community Tasks.
  • Используйте NAnt. Он существует дольше MSBuild и имеет большую поддержку сообщества, но требует, чтобы вы запустили файл проекта с нуля, а не расширяли существующий, созданный Visual Studio.

Посмотрите на инструмент сборки NAnt или MSBuild. Я считаю, что MSBuild - это инструмент для сборки Visual Studio 2005 и более поздних версий. Я, однако, фанат NAnt...

Начиная с Visual Studio 2005, все файлы проекта (по крайней мере, для проектов на основе.NET) являются фактическими файлами MSBuild, поэтому вы можете вызвать MSBuild в командной строке и передать ему файл проекта.

Суть в том, что вам нужно использовать "язык сценариев сборки", такой как NAnt или MSBuild (есть и другие, но это основные сейчас), если вы хотите иметь реальный контроль над процессом сборки.

Вот мой пакетный файл с использованием msbuild для конфигурации отладки VS 2010:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" 
iTegra.Web.sln /p:Configuration=Debug /clp:Summary /nologo

Посмотрите на UppercuT. У него много денег, и он делает то, что вы ищете, и многое другое.

UppercuT использует NAnt для сборки, и это невероятно простая в использовании Build Framework.

Automated Создает так же просто, как (1) имя решения, (2) путь управления исходным кодом, (3) название компании для большинства проектов!

http://projectuppercut.org/

Несколько хороших объяснений здесь: UppercuT

Мне пришлось сделать это для проекта C++ в Visual Studio 2003, поэтому я не знаю, насколько это относится к более поздней версии Visual Studio:

В каталоге, где создается ваш исполняемый файл, будет BuildLog.htm файл. Откройте этот файл в браузере, а затем для каждого раздела, например:

Creating temporary file "c:\some\path\RSP00003C.rsp" with contents
[
/D "WIN32" /D "_WINDOWS" /D "STRICT" /D "NDEBUG" ..... (lots of other switches)
.\Project.cpp
.\Another.cpp
.\AndAnother.cpp
".\And Yet Another.cpp"
]
Creating command line "cl.exe @c:\some\path\RSP00003C.rsp /nologo"

создайте файл.rsp с содержимым в квадратных скобках (но не включая квадратные скобки) и назовите его как хотите. Кажется, я помню, что у меня были проблемы с абсолютными путями, поэтому вам, возможно, придется убедиться, что все пути относительны.

Затем в свой скрипт сборки добавьте командную строку из BuildLog.htm файл, но с вашим именем файла.rsp:

cl.exe @autobuild01.rsp /nologo

(обратите внимание, что там также будет раздел link.exe и cl.exe)

Более простым способом является изменение конфигурации проектов и решений VS 2015: перейдите на вкладку "Инструменты" -> "Параметры" -> "Проекты и решения" -> "Построить и запустить" -> "При запуске", когда проекты устарели (выберите "Всегда строить"). VOILA!

Теперь ваша IDE автоматически создаст ваш проект, когда вы запустите (F5). Надеюсь, это поможет, любые отзывы приветствуются.

Другие вопросы по тегам