MSBuild 도구 집합에는 microsoft.common.tasks 파일, microsoft.common.targets 파일 및 csc.exe 및 vbc.exe같은 컴파일러가 포함됩니다. 대부분의 도구 집합은 둘 이상의 .NET Framework 버전과 둘 이상의 시스템 플랫폼으로 애플리케이션을 컴파일하는 데 사용할 수 있습니다. 그러나 MSBuild 2.0 도구 집합을 사용하여 .NET Framework 2.0만 대상으로 지정할 수 있습니다.
Visual Studio 및 MSBuild 프로젝트 파일의 Project 요소에 대한 MSBuild ToolsVersion
특성은 Visual Studio 2019 이상에서 사용되지 않는 것으로 간주되며 안전하게 삭제할 수 있습니다. 이 문서에서는 이전 버전의 MSBuild 또는 사용자 지정 도구 집합에서 사용하는 것에 대해 설명합니다.
표준 및 사용자 지정 도구 집합 구성을 참조하세요.
ToolsVersion 특성
프로젝트 파일의 ToolsVersion
Project 요소에 있는 특성에 도구 집합을 지정합니다. 다음 예제에서는 MSBuild "현재" 도구 집합을 사용하여 프로젝트를 빌드해야 한다고 지정합니다.
<Project ToolsVersion="Current" ... </Project>
비고
일부 프로젝트 형식은 sdk
ToolsVersion
. 자세한 내용은 .NET Core의 csproj 형식에 대한 추가를 참조하세요.
ToolsVersion 특성의 작동 방식
Visual Studio에서 프로젝트를 만들거나 기존 프로젝트를 업그레이드하면 명명된 ToolsVersion
특성이 프로젝트 파일에 자동으로 포함되고 해당 값은 Visual Studio 버전에 포함된 MSBuild 버전에 해당합니다. 자세한 내용은 Framework 대상 지정 개요참조하세요.
ToolsVersion
프로젝트 파일에 값이 정의되면 MSBuild는 이 값을 사용하여 프로젝트에서 사용할 수 있는 도구 집합 속성의 값을 결정합니다. 도구 집합 속성 중 하나는 .NET Framework 도구의 경로를 지정하는 속성입니다 $(MSBuildToolsPath)
. 해당 도구 집합 속성(또는 $(MSBuildBinPath)
)만 필요합니다.
Visual Studio 2013부터 MSBuild 도구 집합 버전은 Visual Studio 버전 번호와 동일합니다. MSBuild는 프로젝트 파일에 지정된 도구 집합 버전에 관계없이 Visual Studio 및 명령줄에서 이 도구 집합을 기본값으로 사용합니다. 이 동작은 -ToolsVersion 플래그를 사용하여 재정의할 수 있습니다. 자세한 내용은 ToolsVersion 설정 재정의를 참조하세요.
다음 예제에서 MSBuild는 예약된 속성을 사용하여 MSBuildToolsPath
파일을 찾습니다.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
사용자 지정 도구 집합을 정의하여 값을 MSBuildToolsPath
수정할 수 있습니다. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하세요.
명령줄에서 솔루션을 빌드하고 ToolsVersion
msbuild.exe지정하면 솔루션의 각 프로젝트가 자체ToolsVersion
적으로 지정되더라도 모든 프로젝트와 프로젝트-프로젝트 종속성이 그에 ToolsVersion
따라 빌드됩니다. 프로젝트별로 값을 정의 ToolsVersion
하려면 ToolsVersion 설정 재정의를 참조하세요.
이 ToolsVersion
특성은 프로젝트 마이그레이션에도 사용됩니다. 예를 들어 Visual Studio 2010에서 Visual Studio 2008 프로젝트를 열면 프로젝트 파일이 ToolsVersion="4.0"을 포함하도록 업데이트됩니다. 그런 다음 Visual Studio 2008에서 해당 프로젝트를 열려고 하면 업그레이드된 ToolsVersion
프로젝트를 인식하지 못하므로 특성이 여전히 3.5로 설정된 것처럼 프로젝트를 빌드합니다.
Visual Studio 2010 및 Visual Studio 2012는 ToolsVersion 4.0을 사용합니다. Visual Studio 2013은 ToolsVersion 12.0을 사용합니다. Visual Studio 2015는 ToolsVersion 14.0을 사용하고 Visual Studio 2017은 ToolsVersion 15.0을 사용합니다. 대부분의 경우 수정 없이 여러 버전의 Visual Studio에서 프로젝트를 열 수 있습니다. Visual Studio는 항상 올바른 도구 집합을 사용하지만 사용된 버전이 프로젝트 파일의 버전과 일치하지 않으면 알림이 표시됩니다. 대부분의 경우 도구 집합이 호환되므로 이 경고는 거의 모든 경우에 무해합니다.
이 항목의 뒷부분에서 설명하는 하위 도구 집합을 사용하면 MSBuild에서 빌드가 실행되는 컨텍스트에 따라 사용할 도구 집합을 자동으로 전환할 수 있습니다. 예를 들어 MSBuild는 Visual Studio 2012에서 실행할 때 프로젝트 파일을 명시적으로 변경하지 않고 Visual Studio 2010에서 실행할 때보다 최신 도구 집합을 사용합니다.
도구 집합 구현
도구 집합을 구성하는 다양한 도구, 대상 및 작업의 경로를 선택하여 도구 집합을 구현합니다. MSBuild가 정의하는 도구 집합의 도구는 다음 원본에서 제공됩니다.
.NET Framework 폴더입니다.
추가 관리되는 도구.
관리되는 도구에는 ResGen.exe 및 TlbImp.exe포함되어 있습니다 .
MSBuild는 도구 집합에 액세스하는 두 가지 방법을 제공합니다.
도구 집합 속성을 사용하여
메서드 사용 ToolLocationHelper
도구 집합 속성은 도구의 경로를 지정합니다. Visual Studio 2017부터 MSBuild에는 더 이상 고정된 위치가 없습니다. 기본적으로 Visual Studio 설치 위치를 기준으로 MSBuild\15.0\Bin 폴더에 있습니다. 이전 버전에서 MSBuild는 프로젝트 파일의 ToolsVersion
특성 값을 사용하여 해당 레지스트리 키를 찾은 다음 레지스트리 키의 정보를 사용하여 도구 집합 속성을 설정합니다. 예를 들어 값ToolsVersion
이 있는 경우 12.0
MSBuild는 HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0 레지스트리 키에 따라 도구 집합 속성을 설정합니다.
도구 집합 속성은 다음과 같습니다.
MSBuildToolsPath
는 MSBuild 이진 파일의 경로를 지정합니다.SDK40ToolsPath
는 MSBuild 4.x(4.0 또는 4.5일 수 있음)에 대한 추가 관리 도구의 경로를 지정합니다.SDK35ToolsPath
는 MSBuild 3.5에 대한 추가 관리 도구의 경로를 지정합니다.
또는 클래스의 메서드를 호출하여 프로그래밍 방식으로 도구 집합을 ToolLocationHelper 확인할 수 있습니다. 클래스에는 다음 메서드가 포함됩니다.
GetPathToDotNetFramework 는 .NET Framework 폴더의 경로를 반환합니다.
GetPathToDotNetFrameworkFile 는 .NET Framework 폴더에 있는 파일의 경로를 반환합니다.
GetPathToDotNetFrameworkSdk 는 관리되는 도구 폴더의 경로를 반환합니다.
GetPathToDotNetFrameworkSdkFile 는 일반적으로 관리되는 도구 폴더에 있는 파일의 경로를 반환합니다.
GetPathToBuildTools는 빌드 도구의 경로를 반환합니다.