【发布时间】:2010-09-21 18:54:19
【问题描述】:
这可能很简单,但我遇到了困难:当我在 Visual Studio 中构建解决方案时 - 如何提取当前构建命令的确切 cmd 行以便能够从 VisualStudio 控制台执行相同的构建?
在输出窗口中,我可以看到解决方案构建命令中的单个项目,但看不到整个解决方案的项目。
我在 VS2005 上。
任何帮助将不胜感激
【问题讨论】:
标签: visual-studio command-line build-process
这可能很简单,但我遇到了困难:当我在 Visual Studio 中构建解决方案时 - 如何提取当前构建命令的确切 cmd 行以便能够从 VisualStudio 控制台执行相同的构建?
在输出窗口中,我可以看到解决方案构建命令中的单个项目,但看不到整个解决方案的项目。
我在 VS2005 上。
任何帮助将不胜感激
【问题讨论】:
标签: visual-studio command-line build-process
我只想感谢 Bejoy 的例子。我在设置预构建事件的解决方案重建方面遇到了很大的问题,因为他们删除了大部分宏,这对我有很大帮助。
这是我基于 Bejoy 的解决方案(考虑到 .bat 文件位于作为解决方案一部分的 setup 根文件夹中):
call "%VS100COMNTOOLS%\vsvars32.bat"
devenv "%CD%\..\soulutionfile.sln" /build "Release"
【讨论】:
对于 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"
【讨论】:
导航到您的程序菜单 > 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。
【讨论】:
如果您想查看 VS 提供的确切命令行(而不是解决它),那么您可以尝试将 MSBuild.exe 替换为您自己的控制台应用程序,该应用程序将所有参数打印到文件中。
您还可以写出所有提供的环境变量,以检查 VS 在后台提供了哪些环境变量。
【讨论】:
除了@JohnIdol 所说的正确之外,我发现您需要设置一些 VS 环境变量。我面前没有批处理文件的名称,但是您可以修改或“我认为”使用它。它在某处的VS程序文件树中。另外,我记得您不想使用标准外壳,而是使用 .NET 设置外壳,用于某些路径等。稍后我会在使用 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
【讨论】:
您可以从命令行启动 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
【讨论】: