如何使用Windows SDK 7.1从命令行运行msbuild?

问题描述

| 我正在CI服务器上设置.NET 4.0支持。我已经安装了.NET 4.0和Windows 7.1 SDK中的.NET工具。 在.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晦涩难懂,或者是时候该放弃并开始黑客了系统路径?     

解决方法

        要在命令提示符中启用“ 2”,只需将计算机上安装的.NET 4 Framework的路径添加到“ 3”环境变量。 您可以通过以下方式访问环境变量: 右键单击计算机 单击属性 然后单击左侧导航栏上的“高级系统设置” 在下一个对话框中,单击“环境变量”。 向下滚动至
PATH
编辑它以包括您到框架的路径(不要忘记这里的最后一个条目之后的\“; \”)。 供参考,我的路径是
C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319
18/3/21路径更新: 从MSBuild 12(2013)/ VS 2013 / .NET 4.5.1+起,MSBuild现在作为Visual Studio的一部分安装。 作为参考,在安装了VS2015的机器上,我的路径是
C:\\Program Files (x86)\\MSBuild\\14.0\\Bin
    ,        从ѭ7开始,ѭ8是Visual Studio的一部分。早先,MSBuild已作为其一部分安装。 NET框架。 MSBuild直接安装在%ProgramFiles%下。因此,MSBuild的路径可能会有所不同,具体取决于Visual Studio的版本。 对于
Visual Studio 2015
,Path10ѭ的路径是
\"%ProgramFiles(x86)%\\MSBuild\\14.0\\Bin\\MSBuild.exe\"
对于
Visual Studio 15 Preview
,Path10ѭ的路径是
\"%ProgramFiles(x86)%\\MSBuild\\15.0\\Bin\\MSBuild.exe\"
此外,还添加了一些新的MSBuild属性,并对其进行了一些修改。 欲了解更多信息,请点击这里 更新1:VS 2017 随着Visual Studio 2017的发布,MSBuild的位置再次更改。现在安装目录位于ѭ15下。由于我拥有企业版,因此​​我的计算机的MSBuild位置为
\"%ProgramFiles(x86)%\\Microsoft Visual Studio\\2017\\Enterprise\\MSBuild\\15.0\\Bin\\MSbuild.exe\"
    ,        使用“ Visual Studio 20XX开发人员命令提示符”代替“ cmd”,将自动设置msbuild的路径,而不必将其添加到环境变量中。     ,        您的蝙蝠文件可能像:
CD C:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319

msbuild C:\\Users\\mmaratt\\Desktop\\BladeTortoise\\build\\ALL_BUILD.vcxproj

PAUSE

EXIT
    ,        为了能够使用C#6语法进行构建,请在路径中使用以下命令:   C:\\程序文件(x86)\\ MSBuild \\ 14.0 \\ Bin     ,        对于Visual Studio 2019(至少是预览版),它现在位于:   C:\\ Program Files(x86)\\ Microsoft Visual Studio \\ 2019 \\ Preview \\ MSBuild \\ Current \\ Bin \\ MSBuild.exe 我想这个过程对于2019年的正式发布将是相似的。     ,        “ SDK命令提示符”快捷方式运行的
SetEnv.cmd
脚本在设置要添加到
PATH
的条目之前,会在各个位置检查
cl.exe
。因此,如果未安装本机C编译器,它将无法添加任何内容。 要解决此问题,请将以下补丁应用于ѭ21the。这也将修复missing22ѭ和子文件夹中其他工具的缺少路径。当然,您可以安装C编译器来解决此错误。
--- 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 .
+  )
 )

 :: --------------------------------------------------------------------------------------------