如何自动化Visual Studio构建?

52

如何将在Visual Studio IDE中进行的构建转换为可从命令行运行的脚本?

11个回答

32

使用VS2008,您可以做到这一点:

devenv solution.sln /build configuration

这种方式似乎总是最容易的。 - Aardvark
3
http://msdn.microsoft.com/en-us/library/xee0c8y7(v=VS.90).aspx 也适用于2003、2005和2010,但他们建议在2010中使用msbuild。 - Chris Huang-Leaver

30
\Windows\Microsoft.NET\Framework\[YOUR .NET VERSION]\msbuild.exe

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

msbuild.exe yoursln.sln

4
以下是我用于通过批处理脚本完全自动化x86和x64配置的命令行构建的脚本。这基于DevEnv.exe,如果您的构建中有安装程序项目(msbuild不支持构建安装程序项目),则会起作用。我假设您的设置是在32位Windows 7上,使用x86本机编译器和x64交叉编译器安装了Visual Studio 2010设置。如果您正在运行64位Windows,则可能需要根据您的设置在批处理脚本中将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 架构的 Release 版本并包含此版本。
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版本,以运行以下命令:
  • 构建全部 -> D:\MySoln\buildall.bat
  • 仅构建x86 Release -> D:\MySoln\buildall.bat x86
  • 仅构建x64 Release -> D:\MySoln\buildall.bat x64
如果您使用其他配置(如AnyCPU等),则需要相应地自定义上述脚本。

哦,我想我从来没有见过有人将批处理文件导入到cmd.exe中。这实际上非常聪明。 - user169771

4

最简单的方法:进入包含解决方案或项目文件的目录,并运行msbuild(假设你有Visual Studio 2005或更新版本)。

更灵活的方法:

  • 阅读MSBuild参考文档,其中有大量的自定义选项,特别是在安装了MSBuild Community Tasks项目后。
  • 使用NAnt。它比MSBuild存在更长时间并且拥有更多社区支持,但需要你从头开始创建一个项目文件,而不是扩展现有的Visual Studio创建的项目文件。

4

3

了解一下构建工具NAnt或者MSBuild。我相信MSBuild是Visual Studio 2005及更高版本的构建工具。不过,我个人更喜欢NAnt...


1
NAnt只是MSBuild的包装器(因此构建任务的名称为<msbuild>),但NAnt很酷,因为它使您能够更轻松地完成其他事情,而不必使用自定义的msbuild任务。 - BrainSlugs83

2
截至 Visual Studio 2005,所有项目文件(至少针对基于.NET的项目)都是实际的MSBuild文件,因此您可以在命令行上调用MSBuild并传递项目文件。
总之,如果您想要对构建过程有任何真正的控制,则需要使用“构建脚本语言”,例如NAnt或MSBuild(还有其他一些,但这些是目前主流的)。

2
看看UppercuT。它物超所值,能够满足您的需求并且更多。
UppercuT使用NAnt进行构建,是非常易于使用的构建框架。
对于大多数项目,自动化构建就像(1)解决方案名称,(2)源代码控制路径,(3)公司名称那样容易!
网址:http://projectuppercut.org/ 这里有一些好的解释:UppercuT

2

以下是我的批处理文件,使用msbuild来进行VS2010的调试配置:

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

1

我不得不为 Visual Studio 2003 中的 C++ 项目做这个,所以我不知道这对 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接