如何获取VS解决方案的cmd line build命令?

时间:2008-11-11 10:41:37

标签: visual-studio command-line build-process

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

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

我在VS2005上。

任何帮助将不胜感激

6 个答案:

答案 0 :(得分:22)

导航至“程序”菜单> Microsoft Visual Studio 2005> Visual Studio工具> Visual Studio 2005命令提示符

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

Msbuild.exe mySolution.sln

您可以使用 msbuild /?

查看各种可用选项

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

在msbuild /?之上?快速选项检查,您可以参考MSBuild Command Line Reference页面以获取有关其用法的更多说明。并how to build specific targets in solutions

答案 1 :(得分:14)

除了@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

答案 2 :(得分:6)

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

devenv solutionfile.sln  /build solutionconfig

E.g。批处理文件中的用法:

call "C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat"

devenv Tools.sln /build "Release"

答案 3 :(得分:4)

如果您想查看VS提供的确切命令行(而不是将其解决),那么您可以尝试使用自己的控制台应用程序替换MSBuild.exe,该应用程序将所有参数打印到文件中。

您还可以写出所有提供的环境变量,以检查VS在后台提供哪些。

答案 4 :(得分:4)

我只想感谢Bejoy的例子。我在设置预构建事件中解决方案重建时遇到了很大问题,因为它们删除了大部分宏,这对我帮助很大。

以下是基于Bejoy的解决方案(考虑到.bat文件位于设置根文件夹中,这是解决方案的一部分):

call "%VS100COMNTOOLS%\vsvars32.bat"

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

答案 5 :(得分:3)

您可以从命令行启动msbuild。 msbuild了解.sln(解决方案)文件。您可以从命令行指定.sln文件和构建配置(调试,发布等)。

http://msdn.microsoft.com/en-us/library/ms164311.aspx
以下是有关使用msbuild可以执行的操作的文档。 MSBuild.exe与.net框架一起安装,而不是与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