2011-06-12 101 views
96

我正在CI服務器上設置.NET 4.0支持。我已經安裝了.NET 4.0以及Windows 7.1 SDK中的.NET工具。如何使用Windows SDK 7.1從命令行運行msbuild?

在.NET 2.0和3.5上,剛剛工作。在.NET 4中,當我運行從開始菜單中的 「Windows SDK 7.1命令提示符」,它抱怨

The x86 compilers are not currently installed. x86-x86 
Please go to Add/Remove Programs to update your installation. 
. 
Setting SDK environment relative to C:\Program Files\Microsoft 
SDKs\Windows\v7.1 
\. 
Targeting Windows Server 2008 x86 Debug 

然後,當我嘗試運行的MSBuild,我得到:

C:\Program Files\Microsoft SDKs\Windows\v7.1>msbuild 
'msbuild' is not recognized as an internal or external command, 
operable program or batch file. 

C:\Program Files\Microsoft SDKs\Windows\v7.1> 

我不能相信安裝運行時和SDK會給你一個無法運行msbuild的系統......我是否錯過了一些明顯的步驟或模糊Windows Update,或者是放棄並開始黑客入侵系統路徑的時候了?

+0

MS Build試圖構建什麼?如果它是一個C++項目,請確保安裝了x86編譯器。如果您的CI服務器是Server Core,請確保您安裝了WOW64(雖然我在服務器核心上沒有成功運行CI) – vcsjones 2011-06-12 00:07:35

+0

Nope - Windows Server 2008 SP1上的純.NET 4.0 Web應用程序... – 2011-06-12 00:12:23

+0

Erm,不能相信你可以在不支付許可證費用的情況下配置構建服務器? VS許可證允許您安裝在多臺計算機上。我建議你充分利用這一點。 – 2011-06-12 00:18:47

回答

224

要啓用msbuild命令提示符,你只需要在路徑添加到.NET 4 Framework的機器上安裝的PATH環境變量。

您可以通過訪問環境變量:

  1. 右擊計算機
  2. 點擊屬性
  3. 然後點擊左側導航欄中的
  4. 高級系統設置下一個對話框點擊環境變量
  5. 向下滾動到PATH
  6. 編輯它以包含您的框架路徑(不要忘記「;「在這裏的最後一項)。

作爲參考後,我的道路是C:\Windows\Microsoft.NET\Framework\v4.0.30319

+2

我也這樣做,以使msbuild始終可用PowerShell – 2013-10-23 08:35:14

+20

只需記住在添加新路徑後重新啓動提示。 – Campinho 2015-02-25 21:48:18

+2

另外,';'之後不能有任何空格,字符。 – 2015-05-26 02:25:19

-2

了的SetEnv.cmd腳本‘SDK命令提示符’快捷方式運行檢查在不同的地方cl.exe設置項之前要添加到PATH,所以它失敗,如果沒有安裝本地C編譯器添加任何東西。

爲了解決這個問題,應用以下補丁<SDK install dir>\Bin\SetEnv.cmd,這也將修復丟失的路徑位於<SDK install dir>\Bin和子文件夾等工具。當然,喲你可以安裝C編譯器來解決這個bug。

--- SetEnv.Cmd_ 2010-04-27 19:52:00.000000000 +0400 
+++ SetEnv.Cmd 2013-12-02 15:05:30.834400000 +0400 
@@ -228,10 +228,10 @@ 

IF "%CURRENT_CPU%" =="x64" (
    IF "%TARGET_CPU%" == "x64" (
+ SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\amd64\cl.exe" (
     SET "VCTools=%VCTools%\amd64;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The x64 compilers are not currently installed. 
@@ -239,10 +239,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "IA64" (
+ SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\x86_ia64\cl.exe" (
     SET "VCTools=%VCTools%\x86_ia64;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\x64;%WindowsSdkDir%Bin\x64;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The IA64 compilers are not currently installed. 
@@ -250,10 +250,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "x86" (
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\cl.exe" (
     SET "VCTools=%VCTools%;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The x86 compilers are not currently installed. 
@@ -263,10 +263,10 @@ 
    ) 
) ELSE IF "%CURRENT_CPU%" =="IA64" (
    IF "%TARGET_CPU%" == "IA64" (
+ SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\IA64\cl.exe" (
     SET "VCTools=%VCTools%\IA64;%VCTools%;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The IA64 compilers are not currently installed. 
@@ -274,10 +274,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "x64" (
+ SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\x86_amd64\cl.exe" (
     SET "VCTools=%VCTools%\x86_amd64;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools\IA64;%WindowsSdkDir%Bin\IA64;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir64%\%FrameworkVersion%;%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework64\v3.5;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The VC compilers are not currently installed. 
@@ -285,10 +285,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "x86" (
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\cl.exe" (
     SET "VCTools=%VCTools%;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The x86 compilers are not currently installed. 
@@ -298,10 +298,10 @@ 
    ) 
) ELSE IF "%CURRENT_CPU%"=="x86" (
    IF "%TARGET_CPU%" == "x64" (
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\x86_amd64\cl.exe" (
     SET "VCTools=%VCTools%\x86_amd64;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The x64 cross compilers are not currently installed. 
@@ -309,10 +309,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "IA64" (
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\x86_IA64\cl.exe" (
     SET "VCTools=%VCTools%\x86_IA64;%VCTools%;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The IA64 compilers are not currently installed. 
@@ -320,10 +320,10 @@ 
     ECHO . 
    ) 
    ) ELSE IF "%TARGET_CPU%" == "x86" (
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
    IF EXIST "%VCTools%\cl.exe" (
     SET "VCTools=%VCTools%;%VCTools%\VCPackages;" 
-  SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
-  SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
    ) ELSE (
     SET VCTools= 
     ECHO The x86 compilers are not currently installed. x86-x86 
@@ -331,15 +331,17 @@ 
     ECHO . 
    ) 
    ) 
-) ELSE IF EXIST "%VCTools%\cl.exe" (
- SET "VCTools=%VCTools%;%VCTools%\VCPackages;" 
- SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
- SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
) ELSE (
- SET VCTools= 
- ECHO The x86 compilers are not currently installed. default 
- ECHO Please go to Add/Remove Programs to update your installation. 
- ECHO . 
+ SET "FxTools=%FrameworkDir32%%FrameworkVersion%;%windir%\Microsoft.NET\Framework\v3.5;" 
+ SET "SdkTools=%WindowsSdkDir%Bin\NETFX 4.0 Tools;%WindowsSdkDir%Bin;" 
+ IF EXIST "%VCTools%\cl.exe" (
+ SET "VCTools=%VCTools%;%VCTools%\VCPackages;" 
+ ) ELSE (
+ SET VCTools= 
+ ECHO The x86 compilers are not currently installed. default 
+ ECHO Please go to Add/Remove Programs to update your installation. 
+ ECHO . 
+ ) 
) 

:: -------------------------------------------------------------------------------------------- 
4

你的bat文件也能像:

CD C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v4.0.30319

的MSBuild C:\用戶\ mmaratt \桌面\ BladeTortoise \構建\ ALL_BUILD。vcxproj

PAUSE

EXIT

35

Visual Studio 2013起,MSbuild當屬Visual Studio中的一個組成部分。早些時候,MSBuild作爲其中的一部分被安裝。 NET框架。

MSBuild直接安裝在%ProgramFiles%下。所以,根據Visual Studio的版本,MSBuild的路徑可能會有所不同。

對於Visual Studio 2015MSBuild Path是"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

對於Visual Studio 15 PreviewMSBuild Path是"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

此外,一些新的MSBuild特性已經被添加,有些已被修改。 欲瞭解更多信息,看看here

更新1:2017年VS

的MSBuild的位置已用的Visual Studio 2017年的發佈再次改變。現在安裝目錄在%ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\之下。因爲,我有一個企業版,我的機器的MSBuild的位置是"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"

1

爲了能夠使用C#來構建6語法在路徑中使用這樣的:

C:\ Program Files文件(x86)的\的MSBuild \ 14.0 \ Bin

2

使用「Developer Command Prompt for Visual Studio 20XX」而不是「cmd」將自動設置msbuild的路徑,而不必將其添加到環境變量中。