这可能很简单,但我卡住了:当我在Visual Studio中构建解决方案时,如何提取当前构建命令的确切cmd行,以便能够从VisualStudio控制台执行相同的构建?
在输出窗口中,我可以看到解决方案中单个项目的构建命令,但不是整个解决方案的命令。
我使用的是VS2005。
希望得到任何帮助。
这可能很简单,但我卡住了:当我在Visual Studio中构建解决方案时,如何提取当前构建命令的确切cmd行,以便能够从VisualStudio控制台执行相同的构建?
在输出窗口中,我可以看到解决方案中单个项目的构建命令,但不是整个解决方案的命令。
我使用的是VS2005。
希望得到任何帮助。
导航到您的“程序”菜单 > 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命令行参考页面获取有关其用法的更多说明。以及如何在解决方案中构建特定目标。
%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
对于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"
我想感谢Bejoy提供的示例。由于大部分宏已被移除,我在设置预构建事件中遇到了解决方案重建的很大问题,但这个示例帮助了我很多。
以下是基于Bejoy示例的我的解决方案(考虑到.bat文件位于解决方案的设置根文件夹中):
call "%VS100COMNTOOLS%\vsvars32.bat"
devenv "%CD%\..\soulutionfile.sln" /build "Release"