【问题标题】:How do I run msbuild from the command line using Windows SDK 7.1?如何使用 Windows SDK 7.1 从命令行运行 msbuild?
【发布时间】:2011-09-13 05:45:05
【问题描述】:

我正在我们的 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 更新,或者是时候放弃并开始黑客攻击了系统路径?

【问题讨论】:

  • MS Build 试图构建什么?如果是 C++ 项目,请确保已安装 x86 编译器。如果您的 CI 服务器是 Server Core,请确保您安装了 WOW64(虽然我在 Server Core 上运行 CI 没有成功)
  • 不 - Windows Server 2008 SP1 上的普通 .NET 4.0 Web 应用程序...
  • Erm,所以您不太相信您可以配置构建服务器而无需支付许可费? VS 许可证允许您在多台机器上安装。我建议您利用这一点。
  • %VCTools% 环境变量设置为什么?它应该设置为路径。 cl.exe 是否存在于该路径中?另外,您使用的是非英语 Windows 吗?我听说过一些关于本地化 Windows 安装问题的报告。

标签: .net-4.0 msbuild sdk


【解决方案1】:

对于 Visual Studio 2022(至少是预览版),它现在位于:

C:\Program Files\Microsoft Visual Studio\2022\Preview\MSBuild\Current

我想 2022 年官方发布的过程将与此类似。

【讨论】:

    【解决方案2】:

    要在命令提示符中启用msbuild,您只需将您机器上的msbuild.exe安装目录添加到PATH环境变量即可。

    您可以通过以下方式访问环境变量:

    1. 右键单击计算机
    2. 点击属性
    3. 然后点击左侧导航栏的高级系统设置
    4. 在下一个对话框中单击环境变量
    5. 向下滚动至PATH
    6. 编辑它以包含您的框架路径(不要忘记此处最后一个条目后的“;”)。

    作为参考,我的路径是C:\Windows\Microsoft.NET\Framework\v4.0.30319

    路径更新:

    从 MSBuild 12 (2013)/VS 2013/.NET 4.5.1+ 及更高版本开始MSBuild is now installed as a part of Visual Studio。

    对于 VS2015,路径是 %ProgramFiles(x86)%\MSBuild\14.0\Bin

    对于 VS2017,路径是 %ProgramFiles(x86)%\Microsoft Visual Studio\2017\<YOUR_VS_EDITION>\MSBuild\15.0\Bin

    对于 VS2019,路径是 %ProgramFiles(x86)%\Microsoft Visual Studio\2019\<YOUR_VS_EDITION>\MSBuild\Current\Bin

    <YOUR_VS_EDITION> 与您已安装的 Visual Studio 版本匹配,即Preview、Community、Professional、Enterprise。

    【讨论】:

    • 我这样做也是为了让 msbuild 在 PowerShell 中始终可用
    • 添加新路径后记得重启提示。
    • 另外,';' 后面不能有任何空格字符。
    • 那是旧目录,MSBuild 没有安装 .NET 框架,实际上即使在提问时它也已被弃用。 msdn.microsoft.com/en-us/library/hh162058.aspx
    • MSBuild 15.0 的路径已更改。它现在位于 VisualStudio 2017 安装目录下。例如:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin。见docs.microsoft.com/en-us/visualstudio/msbuild/…
    【解决方案3】:

    从Visual Studio 2013 开始,MSbuild 成为 Visual Studio 的一部分。早些时候,MSBuild 是作为其中的一部分安装的。 NET 框架。

    MSBuild 直接安装在 %ProgramFiles% 下。因此,MSBuild 的路径可能会因 Visual Studio 的版本而异。

    对于Visual Studio 2015,MSBuild 的路径是"%ProgramFiles(x86)%\MSBuild\14.0\Bin\MSBuild.exe"

    对于Visual Studio 15 Preview,MSBuild 的路径是"%ProgramFiles(x86)%\MSBuild\15.0\Bin\MSBuild.exe"

    此外,还添加了一些新的 MSBuild 属性并修改了一些属性。 更多信息请查看here

    更新 1:VS 2017

    随着 Visual Studio 2017 的发布,MSBuild 的位置再次发生变化。现在安装目录在%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"

    更新 2:VS 2019

    路径是C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MsBuild.exe。

    【讨论】:

      【解决方案4】:

      对于 Visual Studio 2019(至少是预览版),它现在位于:

      C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin\MSBuild.exe

      我想 2019 年官方发布的过程将与此类似。

      【讨论】:

      • 正确。在 Visual Studio 2019 中,路径为 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\MsBuild.exe。
      【解决方案5】:

      你的 bat 文件可能是这样的:

      CD C:\Windows\Microsoft.NET\Framework64\v4.0.30319
      
      msbuild C:\Users\mmaratt\Desktop\BladeTortoise\build\ALL_BUILD.vcxproj
      
      PAUSE
      
      EXIT
      

      【讨论】:

      • 提供 msbuild 的完整路径意味着您可以在当前目录中查找项目文件,而不是对其进行硬编码。 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*proj 之类的东西可能会这样做,但请注意,较新版本的 MSBuild(大约 2013 年)的路径是不同的。
      【解决方案6】:

      使用“Visual Studio 20XX 的开发人员命令提示符”而不是“cmd”将自动设置 msbuild 的路径,而无需将其添加到您的环境变量中。

      【讨论】:

      • 不,它没有(至少在只安装了 msbuild 而没有安装 Visual Studio 的环境中没有)
      【解决方案7】:

      为了能够使用 C# 6 语法构建,请在路径中使用:

      C:\Program Files (x86)\MSBuild\14.0\Bin

      【讨论】:

        【解决方案8】:

        “SDK 命令提示符”快捷方式运行的SetEnv.cmd 脚本在设置要添加到PATH 的条目之前在各个位置检查cl.exe。因此,如果未安装本机 C 编译器,则无法添加任何内容。

        要解决此问题,请将以下补丁应用于<SDK install dir>\Bin\SetEnv.cmd。这也将修复位于<SDK install dir>\Bin 和子文件夹中的其他工具的缺失路径。当然,您可以安装 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 .
        +  )
         )
        
         :: --------------------------------------------------------------------------------------------
        

        【讨论】:

          猜你喜欢
          • 2021-09-10
          • 1970-01-01
          • 1970-01-01
          • 2013-06-25
          • 2013-05-10
          • 2012-01-24
          • 2018-05-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多