Windows SDK 7.1을 사용하여 명령 줄에서 msbuild를 어떻게 실행합니까?


141

CI 서버에서 .NET 4.0 지원을 설정하고 있습니다. Windows 7.1 SDK에서 .NET 4.0과 .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를 실행할 수없는 시스템이 남을 것입니다. ?


MS Build는 무엇입니까? C ++ 프로젝트 인 경우 x86 컴파일러가 설치되어 있는지 확인하십시오. CI 서버가 Server Core 인 경우 WOW64를 설치해야합니다 (Server Core에서 CI를 성공적으로 실행하지는 못했지만)
vcsjones

Nope-Windows Server 2008 SP1의 일반 .NET 4.0 웹 앱 ...
Dylan Beattie

음, 라이센스 비용을 지불하지 않고 빌드 서버를 구성 할 수 있다고 믿을 수 없습니까? VS 라이센스를 사용하면 둘 이상의 시스템에 설치할 수 있습니다. 나는 당신이 그것을 활용하는 것이 좋습니다.
Hans Passant 2018 년

%VCTools%환경 변수 는 무엇으로 설정되어 있습니까? 경로로 설정해야합니다. cl.exe그 길에 존재 합니까 ? 또한 영어 이외의 Windows를 사용하고 있습니까? 현지화 된 Windows 설치에서이 문제에 대한보고를 들었습니다.
vcsjones 2016 년

답변:


292

명령 프롬프트msbuild 에서 사용하려면 컴퓨터에 .NET 4 Framework 설치 경로를 환경 변수 에 추가하기 만하면 됩니다.PATH

다음과 같이 환경 변수에 액세스 할 수 있습니다.

  1. 컴퓨터를 마우스 오른쪽 버튼으로 클릭
  2. 속성을 클릭하십시오
  3. 그런 다음 왼쪽 탐색 모음에서 고급 시스템 설정 을 클릭하십시오.
  4. 다음 대화 상자에서 환경 변수를 클릭하십시오.
  5. 아래로 스크롤 PATH
  6. 프레임 워크 경로를 포함하도록 편집하십시오 ( 여기서 마지막 항목 뒤에 " ; "를 잊지 마십시오 ).

참고로 내 길은 C:\Windows\Microsoft.NET\Framework\v4.0.30319

3/21/18 경로 업데이트 :

MSBuild 12 (2013) / VS 2013 / .NET 4.5.1 이상부터 MSBuild는 Visual Studio의 일부로 설치되었습니다 .

참고로 VS2015를 설치하면 내 경로는 다음과 같습니다. C:\Program Files (x86)\MSBuild\14.0\Bin


2
나는 PowerShell에서 msbuild를 항상 사용할 수 있도록 할뿐만 아니라이 작업을 수행
위브 Tijsma

36
새 경로를 추가 한 후 프롬프트를 다시 시작하십시오.
Campinho

3
또한 ';'뒤에 공백이 없어야합니다. 캐릭터.
Michael Fry

4
MSBuild는 .NET 프레임 워크와 함께 설치되지 않는 이전 디렉토리입니다. 실제로 질문 할 때도 더 이상 사용되지 않습니다. msdn.microsoft.com/ko-kr/library/hh162058.aspx
JM Becker

8
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/...
아사 프 이스라엘에게

73

에서 Visual Studio 2013이후, MSbuild비주얼 스튜디오의 일환으로 제공됩니다. 이전에는 MSBuild가 일부로 설치되었습니다. 넷 프레임 워크.

MSBuild% ProgramFiles % 아래에 직접 설치됩니다 . 따라서 Visual Studio 버전에 따라 MSBuild 경로가 다를 수 있습니다.

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"


7

"cmd"대신 "Visual Studio 20XX 용 개발자 명령 프롬프트"를 사용하면 환경 변수에 추가하지 않고도 msbuild의 경로가 자동으로 설정됩니다.


1
아니요, 적어도 msbuild 만 설치되어 있지만 Visual Studio는 설치되지 않은 환경에는 없습니다.
Ezh

6

박쥐 파일은 다음과 같습니다.

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최신 버전의 MSBuild (2013 년경)의 경로가 다르지만 이와 비슷한 방법 이 있습니다.
jpaugh

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

2

C # 6 구문으로 빌드하려면 다음을 경로에서 사용하십시오.

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


-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.