Windows SDK 7.1を使用してコマンドラインからmsbuildを実行するにはどうすればよいですか?


141

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を不明瞭にしたり、システムパスのハッキングを開始したりする時間です?


MS Buildは何を構築しようとしていますか?C ++プロジェクトの場合は、x86コンパイラがインストールされていることを確認してください。CIサーバーがServer Coreの場合は、WOW64をインストールしてください(Server CoreでCIを実行するのに成功していません)
vcsjones

いいえ-Windows Server 2008 SP1上のプレーン.NET 4.0 Webアプリ...
Dylan Beattie

ええと、ライセンス料を支払わずにビルドサーバーを構成できるとはまったく信じられませんか?VSライセンスでは、複数のマシンにインストールできます。それを利用することをお勧めします。
ハンスパッサント

%VCTools%設定されている環境変数は何ですか?パスに設定する必要があります。cl.exeそのパスに存在しますか?また、英語以外のWindowsを使用していますか?ローカライズされたWindowsインストールに関するこの問題の報告をいくつか聞いたことがあります。
vcsjones 2011年

回答:


292

コマンドプロンプトで有効msbuildにするには、マシンにインストールされている.NET 4 Frameworkへのパスを環境変数に追加するだけです。PATH

次の方法で環境変数にアクセスできます。

  1. コンピュータを右クリック
  2. プロパティをクリックします
  3. 次に、左側のナビゲーションバーで[ システムの詳細設定 ]をクリックします。
  4. 次のダイアログボックスで、[ 環境変数 ]をクリックします。
  5. 下にスクロールして PATH
  6. それを編集して、フレームワークへのパスを含めます(ここの最後のエントリの後に「;」を忘れないでください)。

参考までに、私のパスは C:\Windows\Microsoft.NET\Framework\v4.0.30319

2018年3月21日、パスの更新:

MSBuild 12(2013)/ VS 2013 / .NET 4.5.1+以降、MSBuildはVisual Studioの一部としてインストールされるようになりました

参考までに、VS2015が私のマシンにインストールされている場合、私のパスは C:\Program Files (x86)\MSBuild\14.0\Bin


2
msbuildをPowerShellで常に使用できるようにするためにもこれを行います
Wiebe Tijsma 2013年

36
新しいパスを追加した後、プロンプトを再起動することを忘れないでください。
Campinho、2015

3
また、「;」の後に空白を入れることはできません。キャラクター。
マイケルフライ2015年

4
それは古いディレクトリであり、MSBuildは.NET Frameworkと共にインストールされません。実際には、質問の時点でも非推奨の情報でした。msdn.microsoft.com/en-us/library/hh162058.aspx
JMベッカー

8
MSBuild 15.0ではパスが変更されました。これは、VisualStudio 2017インストールディレクトリの下にあります。例:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bindocs.microsoft.com/en-us/visualstudio/msbuild/…を
Assaf Israel

73

よりVisual Studio 2013以降、MSbuildVisual Studioのの一部として付属しています。以前は、MSBuildはその一部としてインストールされていました。ネットフレームワーク。

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プロパティが追加され、一部が変更されました。詳細はこちらをご覧ください

アップデート1:VS 2017

MSBuildの場所は、Visual Studio 2017のリリースで再び変更されました。これで、インストールディレクトリはの下にあり%ProgramFiles(x86)%\Microsoft Visual Studio\2017\[VS Edition]\MSBuild\15.0\Bin\ます。Enterpriseエディションを持っているので、自分のマシンのMSBuildの場所は"%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSbuild.exe"


これは私のケースを解決します。マイクロソフトがMSビルド全体で1つの場所を決定しないのはなぜですか?
ホアンロング

7

"cmd"の代わりに "Visual Studio 20XXの開発者コマンドプロンプト"を使用すると、環境変数に追加することなく、msbuildのパスが自動的に設定されます。


1
いいえ、ありません(少なくともmsbuildのみがインストールされており、ビジュアルスタジオはインストールされていない環境では)
Ezh

6

あなたのbatファイルは次のようになります:

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

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

PAUSE

EXIT

1
msbuildへの完全なパスを指定することは、ハードコーディングする代わりに、現在のディレクトリでプロジェクトファイルを検索できることを意味します。以下のような何かがC:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild *.*proj(2013年頃)のMSBuildの新しいバージョンのパスが異なることに注意してくださいを行うものの、それを行う可能性があります。
jpaugh 2018年

6

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です。
eddex


-3

SetEnv.cmdスクリプトそのため、「SDKコマンドプロンプト」ショートカットの実行チェックcl.exeに追加する項目を設定する前に様々な場所でPATH。そのため、ネイティブ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 .
+  )
 )

 :: --------------------------------------------------------------------------------------------
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.