如何获取Visual Studio解决方案的命令行构建命令?

29

这可能很简单,但我卡住了:当我在Visual Studio中构建解决方案时,如何提取当前构建命令的确切cmd行,以便能够从VisualStudio控制台执行相同的构建?

在输出窗口中,我可以看到解决方案中单个项目的构建命令,但不是整个解决方案的命令。

我使用的是VS2005。

希望得到任何帮助。

6个回答

25

导航到您的“程序”菜单 > Microsoft Visual Studio 2005 > Visual Studio Tools > Visual Studio 2005 命令提示符

此命令提示符已设置所有必要的.NET环境变量以供命令行会话使用。您可以更改目录到您的解决方案目录(例如c:\projects\mySolution)并运行

Msbuild.exe mySolution.sln

使用msbuild /?可以查看可用选项。

Msbuild位于C:\Windows\Microsoft.NET\Framework\v2.0.50727。

除了快速选项检查msbuild /?之外,您还可以参考MSBuild命令行参考页面获取有关其用法的更多说明。以及如何在解决方案中构建特定目标


2
是的 - 但我如何确定手动构建时使用了哪些选项? - JohnIdol
同样适用于VS2010。http://blogs.msdn.com/b/vcblog/archive/2010/01/11/vcbuild-vs-c-msbuild-on-the-command-line.aspx - Liran Orevi

16
除了@JohnIdol正确提到的内容,我发现你需要设置一些VS环境变量。我没有批处理文件的名称在我面前,但你可以修改或“我认为”使用它。它在VS程序文件树的某个地方。此外,我记得你不想使用标准shell,而是使用.NET设置shell来处理某些路径等。当我有一个带有VS的Windows PC时,我会添加更多细节。
编辑:提到的批处理文件是ProgFiles菜单中的快捷方式。以下是其属性的详细信息。
%comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat""x86"

这是我的批处理文件,使用MSBuild来调用解决方案。

@echo off

:: setup VS2005 command line build environment
set VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8
set VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8\VC
set FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
set FrameworkVersion=v2.0.50727
set FrameworkSDKDir=C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0
set DevEnvDir=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
set PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Com
mon7\Tools;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\bin;C:\Program Files\Microsoft
 Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PATH%
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\INCLUDE;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\Program Files\Microsoft Visual
 Studio 8\VC\PlatformSDK\include;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\include;%INCLUDE%
set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB;C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\VC
\PlatformSDK\lib;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%LIB%
set LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\ATLMFC\LIB

echo %0 %*
echo %0 %* >> %MrB-LOG%
cd
if not ""=="%~dp1" pushd %~dp1
cd
if exist %~nx1 (
        echo VS2005 build of '%~nx1'.
        echo VS2005 build of '%~nx1'. >> %MrB-LOG%
        set MrB-BUILDLOG=%MrB-BASE%\%MrB-WORK%.%MrB-NICEDATE%.%MrB-NICETIME%.build-errors.log
        msbuild.exe %~nx1 /t:Rebuild /p:Configuration=Release > %MrB-BUILDLOG%
        findstr /r /c:"[1-9][0-9]* Error(s)" %MrB-BUILDLOG%
        if not errorlevel 1 (
                echo ERROR: sending notification email for build errors in '%~nx1'.
                echo ERROR: sending notification email for build errors in '%~nx1'. >> %MrB-LOG%
                call mrb-email "Mr Build isn't happy about build errors in '%~nx1'" %MrB-BUILDLOG%
        ) else (
                findstr /r /c:"[1-9][0-9]* Warning(s)" %MrB-BUILDLOG%
                if not errorlevel 1 (
                        echo ERROR: sending notification email for build warnings in '%~nx1'.
                        echo ERROR: sending notification email for build warnings in '%~nx1'. >> %MrB-LOG%
                        call mrb-email "Mr Build isn't happy about build warnings in '%~nx1'" %MrB-BUILDLOG%
                ) else (
                        echo Successful build of '%~nx1'.
                        echo Successful build of '%~nx1'. >> %MrB-LOG%
                )
        )
) else (
        echo ERROR '%1' doesn't exist.
        echo ERROR '%1' doesn't exist. >> %MrB-LOG%
)
popd

7

对于VS .NET 2003,您可以使用devenv.exe在命令行中构建解决方案/项目。

devenv solutionfile.sln  /build solutionconfig

例如在批处理文件中的使用:
call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"

devenv Tools.sln /build "Release"

这也适用于Visual Studio 2005,但vsvars32.bat文件位于:C:\Program Files\Microsoft Visual Studio 8\Common7\Tools - Ray

5
如果您想查看由VS提供的确切命令行(而不是自己计算),则可以尝试用自己的控制台应用程序替换MSBuild.exe,并将所有参数打印到文件中。
您还可以编写出所有提供的环境变量,以检查VS在后台提供的哪些变量。

4

我想感谢Bejoy提供的示例。由于大部分宏已被移除,我在设置预构建事件中遇到了解决方案重建的很大问题,但这个示例帮助了我很多。

以下是基于Bejoy示例的我的解决方案(考虑到.bat文件位于解决方案的设置根文件夹中):

call "%VS100COMNTOOLS%\vsvars32.bat"

devenv "%CD%\..\soulutionfile.sln" /build "Release"

3
您可以从命令行启动msbuild。 msbuild可以理解.sln(解决方案)文件。您可以在命令行中指定.sln文件和构建配置(调试,发布等)。这里是有关msbuild的文档:http://msdn.microsoft.com/en-us/library/ms164311.aspx。MSBuild.exe安装在.NET Framework中,而不是Visual Studio中。您可以在c:\ windows \ microsoft.net \ framework \ v3.5(或v2.0.50727)中找到它。我搜索了一下,发现您还可以使用devenv.exe / build进行Visual Studio的命令行构建,更多信息请参见:http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx

1
谢谢 - 我更在寻找一种获取特定命令行的方法(Visual Studio 在执行 msbuild 时使用哪些参数)。 - JohnIdol

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