如何自动化Visual Studio构build?

你如何将在IDE中执行的Visual Studio构build变成可以从命令行运行的脚本?

用VS2008你可以这样做:

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

很多命令行参数,但最简单的只是:

 msbuild.exe yoursln.sln 

最简单的方法:导航到包含解决scheme或项目文件的目录,然后运行msbuild (假设您有Visual Studio 2005或更高版本)。

更灵活的方式:

  • 阅读MSBuild参考 。 有大量的定制,特别是一旦你安装了MSBuild社区任务项目 。
  • 使用NAnt 。 它的存在时间超过了MSBuild,并且有更多的社区支持,但需要从头开始一个项目文件,而不是扩展现有的Visual Studio创build的项目文件。

NAntMSBuild是在.NET中自动化构build的最stream行的工具,您可以在Stack Overflow问题的最佳.NET构build工具中find各自的优点/缺点。

查看构build工具NAnt或MSBuild 。 我相信MSBuild是Visual Studio 2005及更高版本的构build工具。 不过,我是NAnt的粉丝

看看UppercuT。 它有很多爆炸性的东西,它可以做你正在寻找的东西,还有更多。

UppercuT使用NAnt来构build,使用Build Framework非常简单。

自动构build像(1)解决scheme名称一样简单,(2)源代码pipe理path,(3)大多数项目的公司名称!

http://projectuppercut.org/

这里有一些很好的解释: UppercuT

这里是我的batch file使用msbuild VS 2010debuggingconfiguration:

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

从Visual Studio 2005开始 ,所有的项目文件(至less对于基于.NET的项目)都是实际的MSBuild文件,所以你可以在命令行中调用MSBuild,并将其传递给项目文件。

底线是,如果你想对你的构build过程有任何真正的控制,你需要使用像NAnt或MSBuild这样的“构build脚本语言”(还有其他的,但现在是主stream的)。

以下是我正在使用的脚本,通过批处理脚本为相同的解决scheme完全自动化x86和x64configuration的命令行版本。

这是基于DevEnv.exe,因为它可以工作,如果您有一个安装项目在您的版本(msbuild不支持build立安装项目)。

我假设你的设置是使用x86本机编译器和x64交叉编译器的Visual Studio 2010安装程序的32位Windows 7。 如果您正在运行64位Windows,则可能需要根据您的设置将批处理脚本中的x86_amd64更改为amd64 。 这假定Visual Studio安装在Program Files中,并且您的解决scheme位于D:\ MySoln中

创build一个名为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 

现在再创build2个批处理脚本:

使用crosscompilex86.bat来构buildx86版本的发行版,并包含这个版本

 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构buildx64版本的Release版本并包含此版本

 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个batch file与MySoln.sln一起放在解决scheme文件夹中。 您可以通过在运行以下命令的桌面上创build快捷方式来构buildx86和x64发行版本:

  • 全部构build – > D:\ MySoln \ buildall.bat
  • 仅生成x86发行版 – > D:\ MySoln \ buildall.bat x86
  • 仅生成x64版本 – > D:\ MySoln \ buildall.bat x64

如果您正在使用其他configuration,如AnyCPU等您需要相应地自定义上述脚本。

我必须为Visual Studio 2003中的C ++项目执行此操作,所以我不知道这与Visual Studio的更高版本有多相关:

在您的可执行文件创build的目录中将会有一个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" 

用方括号(但不包括方括号)之间的内容创build一个.rsp文件,然后随心所欲地调用它。 我似乎记得有绝对path的问题,所以你可能要确保所有的path是相对的。

然后在构build脚本中,从BuildLog.htm文件中添加命令行,但使用.rsp文件名:

 cl.exe @autobuild01.rsp /nologo 

(注意,还会有一个link.exe部分以及cl.exe)

更简单的方法是更改​​VS 2015项目和解决schemeconfiguration:当项目过期时(select始终构build),转至工具选项卡 – >选项 – >项目和解决scheme – >生成并运行 – >运行。 瞧!

现在,您的IDE将在运行(F5)时自动构build您的项目。 希望这有助于,任何反馈,欢迎。