2011-06-12 100 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的路径,而不必将其添加到环境变量中。