2008-11-11 293 views
25

這可能很簡單,但我陷入困境:當我在Visual Studio中構建解決方案時 - 如何從當前構建命令中提取確切的cmd行以便能夠從VisualStudio控制檯執行相同的構建?如何獲得VS解決方案的cmd命令行構建命令?

在輸出窗口中,我可以看到解決方案構建命令中的單個項目,但沒有整個解決方案中的單個項目。

我在VS2005上。

任何幫助將不勝感激

回答

13

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

謝謝這真的很有幫助 – JohnIdol 2008-11-12 13:27:05

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)中找到它。

我搜索了一下,發現你也可以用visual studio使用devenv進行命令行編譯。 exe/build,更多信息在這裏:
http://msdn.microsoft.com/en-us/library/xee0c8y7(VS.80).aspx

+0

編輯我的文章的鏈接更深入的信息。 – Mendelt 2008-11-11 13:00:09

+0

謝謝 - 我正在尋找更多的方式來獲得一個特定的命令行(VS執行msbuild時使用哪些參數) – JohnIdol 2008-11-14 11:54:49

3

如果您希望看到由VS提供的確切的命令行(而不是做出來),那麼你可以嘗試用打印出的所有參數到一個文件你自己的控制檯應用程序替換MSBuild.exe 。

你也可以寫出所有提供的環境變量來檢查VS在後臺提供哪些變量。

19

導航到您的程序菜單> Microsoft Visual Studio 2005> Visual Studio Tools>Visual Studio 2005命令提示符

此命令提示符具有爲命令行會話設置的所有必需的.NET環境變量。您可以更改目錄到您的解決方案目錄(如C:\項目\ mySolution),然後運行

Msbuild.exe mySolution.sln 

您可以看到使用的MSBuild /可用的各種選項?

的MSBuild位於C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727

在MSBuild的頂部/?快速選項檢查,您可以參考MSBuild Command Line Reference頁面獲取更多關於其用法的說明。和how to build specific targets in solutions

+2

是的 - 但我怎麼才能弄清楚哪些選項正在使用,當我運行手動構建? – JohnIdol 2008-11-14 11:52:57

5

對於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" 
4

我只是想感謝Bejoy的例子。我在安裝預構建事件時解決方案重建時遇到了很大問題,因爲它們刪除了大部分宏,這對我有很大幫助。

這裏是基於Bejoy的(考慮到.bat文件位於安裝根文件夾這是解決方案的一部分),我的解決方案:

call "%VS100COMNTOOLS%\vsvars32.bat" 

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