MSBuild 도구 집합(ToolsVersion)MSBuild Toolset (ToolsVersion)

MSBuild는 응용 프로그램을 빌드하기 위한 작업, 대상 및 도구로 구성된 도구 집합을 사용합니다.MSBuild uses a Toolset of tasks, targets, and tools to build an application. 일반적으로 MSBuild 도구 집합에는 microsoft.common.tasks 파일, microsoft.common.targets 파일 및 컴파일러(예: csc.exe 및 vbc.exe)가 포함되어 있습니다.Typically, a MSBuild Toolset includes a microsoft.common.tasks file, a microsoft.common.targets file, and compilers such as csc.exe and vbc.exe. 대부분의 도구 집합을 사용하여 응용 프로그램을 둘 이상의 .NET Framework 버전 및 둘 이상의 시스템 플랫폼으로 컴파일할 수 있습니다.Most Toolsets can be used to compile applications to more than one version of the .NET Framework and more than one system platform. 그러나 MSBuild 2.0 도구 집합을 사용해서는 .NET Framework 2.0만 대상으로 할 수 있습니다.However, the MSBuild 2.0 Toolset can be used to target only the .NET Framework 2.0.

ToolsVersion 특성ToolsVersion Attribute

프로젝트 파일에서 Project 요소의 ToolsVersion 특성에 도구 집합을 지정합니다.Specify the Toolset in the ToolsVersion attribute on the Project element in the project file. 다음 예제에서는 MSBuild 15.0 도구 집합을 사용하여 프로젝트를 빌드해야 하도록 지정합니다.The following example specifies that the project should be built by using the MSBuild 15.0 Toolset.

<Project ToolsVersion="15.0" ... </Project>  

ToolsVersion 특성의 작동 방식How the ToolsVersion Attribute Works

Visual Studio에서 프로젝트를 만들거나 기존 프로젝트를 업그레이드할 때 ToolsVersion이라는 특성이 자동으로 프로젝트 파일에 포함되고 해당 값은 Visual Studio 버전에 포함된 MSBuild의 버전에 해당합니다.When you create a project in Visual Studio, or upgrade an existing project, an attribute named ToolsVersion is automatically included in the project file and its value corresponds to the version of MSBuild that is included in the Visual Studio edition. 자세한 내용은 특정 대상 .NET Framework 버전 지정을 참조하세요.For more information, see Targeting a Specific .NET Framework Version.

ToolsVersion 값이 프로젝트 파일에 정의되면 MSBuild는 해당 값을 사용하여 프로젝트에 사용 가능한 도구 집합 속성의 값을 확인합니다.When a ToolsVersion value is defined in a project file, MSBuild uses that value to determine the values of the Toolset properties that are available to the project. 도구 집합 속성 하나는 $(MSBuildToolsPath)이며, 이 속성은 .NET Framework 도구의 경로를 지정합니다.One Toolset property is $(MSBuildToolsPath), which specifies the path of the .NET Framework tools. 이 도구 집합 속성(또는 $(MSBuildBinPath))만 필수입니다.Only that Toolset property (or $(MSBuildBinPath)), is required.

Visual Studio 2013부터 MSBuild 도구 집합 버전은 Visual Studio 버전 번호와 동일합니다.Starting in Visual Studio 2013, the MSBuild Toolset version is the same as the Visual Studio version number. MSBuild는 프로젝트 파일에 지정된 도구 집합 버전과 관계없이 Visual Studio 내에서와 명령줄에서 기본값인 이 도구 집합으로 설정됩니다.MSBuild defaults to this Toolset within Visual Studio and on the command line, regardless of the toolset version specified in project file. /ToolsVersion 플래그를 사용하여 이 동작을 재정의할 수 있습니다.This behavior can be overridden by using the /ToolsVersion flag. 자세한 내용은 ToolsVersion 설정 재정의를 참조하세요.For more information, see Overriding ToolsVersion Settings.

다음 예제에서 MSBuild는 예약된 속성 MSBuildToolsPath를 사용하여 Microsoft.CSharp.targets 파일을 찾습니다.In the following example, MSBuild finds the Microsoft.CSharp.targets file by using the MSBuildToolsPath reserved property.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />  

사용자 지정 도구 집합을 정의하여 MSBuildToolsPath의 값을 수정할 수 있습니다.You can modify the value of MSBuildToolsPath by defining a custom Toolset. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하세요.For more information, see Standard and Custom Toolset Configurations

명령줄에서 솔루션을 빌드하고 msbuild.exe에 대해 ToolsVersion을 지정하면 솔루션의 각 프로젝트에서 자체 ToolsVersion을 지정하더라도 모든 프로젝트 및 해당 프로젝트 간 종속성이 해당 ToolsVersion에 따라 빌드됩니다.When you build a solution on the command line and specify a ToolsVersion for msbuild.exe, all projects and their project-to-project dependencies are built according to that ToolsVersion, even if each project in the solution specifies its own ToolsVersion. 프로젝트별로 ToolsVersion 값을 정의하려면 ToolsVersion 설정 재정의를 참조하세요.To define the ToolsVersion value on a per project basis, see Overriding ToolsVersion Settings.

ToolsVersion 특성은 프로젝트 마이그레이션에도 사용됩니다.The ToolsVersion attribute is also used for project migration. 예를 들어, Visual Studio 2010에서 Visual Studio 2008 프로젝트를 열면 프로젝트 파일이 ToolsVersion=“4.0”을 포함하도록 업데이트됩니다.For example, if you open a Visual Studio 2008 project in Visual Studio 2010, the project file is updated to include ToolsVersion="4.0". 그런 다음 Visual Studio 2008에서 해당 프로젝트를 열려고 하면 업그레이드된 ToolsVersion이 인식되지 않으므로 이 특성이 여전히 3.5로 설정된 것처럼 프로젝트가 빌드됩니다.If you then try to open that project in Visual Studio 2008, it doesn't recognize the upgraded ToolsVersion and therefore builds the project as though the attribute was still set to 3.5.

Visual Studio 2010과 Visual Studio 2012는 ToolsVersion 4.0을 사용합니다.Visual Studio 2010 and Visual Studio 2012 use a ToolsVersion of 4.0. Visual Studio 2013은 ToolsVersion 12.0을 사용합니다.Visual Studio 2013 uses a ToolsVersion of 12.0. Visual Studio 2015는 ToolsVersion 14.0을 사용하고 Visual Studio 2017은 ToolsVersion 15.0을 사용합니다.Visual Studio 2015 uses ToolsVersion 14.0, and Visual Studio 2017 uses ToolsVersion 15.0. 많은 경우에 Visual Studio의 여러 버전에서 프로젝트를 수정하지 않고 열 수 있습니다.In many cases, you can open the project in multiple versions of Visual Studio without modification. Visual Studio는 항상 올바른 도구 집합을 사용하지만 사용된 버전이 프로젝트 파일의 버전과 일치하지 않을 경우 알림이 표시됩니다.Visual Studio always uses the correct Toolset, but you will be notified if the version used does not match the version in the project file. 도구 집합은 대부분의 경우에 호환되므로 거의 모든 경우에 이 경고는 심각하지 않습니다.In almost all cases, this warning is benign as the Toolsets are compatible in most cases.

이 항목의 뒷부분에 설명되어 있는 하위 도구 집합을 통해 MSBuild는 빌드가 실행되는 컨텍스트를 기반으로 사용할 도구 집합을 자동으로 전환할 수 있습니다.Sub-toolsets, which are described later in this topic, allow MSBuild to automatically switch which set of tools to use based on the context in which the build is being run. 예를 들어, MSBuild는 Visual Studio 2012에서 실행될 때 Visual Studio 2010에서 실행될 때보다 최신 도구 집합을 사용하며 사용자가 명시적으로 프로젝트 파일을 변경할 필요가 없습니다.For example, MSBuild uses a newer set of tools when it's run in Visual Studio 2012 than when it's run in Visual Studio 2010, without your having to explicitly change the project file.

도구 집합 구현Toolset Implementation

도구 집합을 구성하는 다양한 도구, 대상 및 작업의 경로를 선택하여 도구 집합을 구현합니다.Implement a Toolset by selecting the paths of the various tools, targets, and tasks that make up the Toolset. MSBuild가 정의하는 도구 집합의 도구는 다음 소스에서 가져옵니다.The tools in the Toolset that MSBuild defines come from the following sources:

  • .NET Framework 폴더The .NET Framework folder.

  • 추가 관리되는 도구Additional managed tools.

    관리되는 도구에는 ResGen.exe 및 TlbImp.exe가 포함됩니다.The managed tools include ResGen.exe and TlbImp.exe.

    MSBuild는 다음과 같이 도구 집합에 액세스하는 두 가지 방법을 제공합니다.MSBuild provides two ways to access the Toolset:

  • 도구 집합 속성 사용By using Toolset properties

  • ToolLocationHelper 메서드 사용By using ToolLocationHelper methods

    도구 집합 속성은 도구의 경로를 지정합니다.Toolset properties specify the paths of the tools. MSBuild는 프로젝트 파일의 ToolsVersion 특성 값을 사용하여 해당 레지스트리 키를 찾은 다음 레지스트리 키의 정보를 사용하여 도구 집합 속성을 설정합니다.MSBuild uses the value of the ToolsVersion attribute in the project file to locate the corresponding registry key, and then uses the information in the registry key to set the Toolset properties. 예를 들어, ToolsVersion의 값이 12.0인 경우 MSBuild는 HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0 레지스트리 키에 따라 도구 집합 속성을 설정합니다.For example, if ToolsVersion has the value 12.0, then MSBuild sets the Toolset properties according to this registry key: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.

    다음은 도구 집합 속성입니다.These are Toolset properties:

  • MSBuildToolsPath는 MSBuild 이진의 경로를 지정합니다.MSBuildToolsPath specifies the path of the MSBuild binaries.

  • SDK40ToolsPath는 MSBuild 4.x(4.0 또는 4.5일 수 있음)용 추가 관리되는 도구의 경로를 지정합니다.SDK40ToolsPath specifies the path of additional managed tools for MSBuild 4.x (which could be 4.0 or 4.5).

  • SDK35ToolsPath는 MSBuild 3.5용 추가 관리되는 도구의 경로를 지정합니다.SDK35ToolsPath specifies the path of additional managed tools for MSBuild 3.5.

    또는 ToolLocationHelper 클래스의 메서드를 호출하여 프로그래밍 방식으로 도구 집합을 확인할 수 있습니다.Alternately, you can determine the Toolset programmatically by calling the methods of the ToolLocationHelper class. 이 클래스에는 다음과 같은 메서드가 포함되어 있습니다.The class includes these methods:

  • GetPathToDotNetFramework는 .NET Framework 폴더의 경로를 반환합니다.GetPathToDotNetFramework returns the path of the .NET Framework folder.

  • GetPathToDotNetFrameworkFile은 .NET Framework 폴더에 있는 파일의 경로를 반환합니다.GetPathToDotNetFrameworkFile returns the path of a file in the .NET Framework folder.

  • GetPathToDotNetFrameworkSdk는 관리되는 도구 폴더의 경로를 반환합니다.GetPathToDotNetFrameworkSdk returns the path of the managed tools folder.

  • GetPathToDotNetFrameworkSdkFile은 일반적으로 관리되는 도구 폴더에 있는 파일의 경로를 반환합니다.GetPathToDotNetFrameworkSdkFile returns the path of a file, which is typically located in the managed tools folder.

  • <xref:Microsoft.Build.Utilities.ToolLocationHelper.GetPathToBuildTools%2A>는 빌드 도구의 경로를 반환합니다.<xref:Microsoft.Build.Utilities.ToolLocationHelper.GetPathToBuildTools%2A> returns the path of the build tools.

하위 도구 집합Sub-toolsets

이 항목의 앞부분에서 설명한 것처럼, MSBuild는 레지스트리 키를 사용하여 기본 도구의 경로를 지정합니다.As described earlier in this topic, MSBuild uses a registry key to specify the path of the basic tools. 키에 하위 키가 포함된 경우 MSBuild는 하위 키를 사용하여 추가 도구가 포함되어 있는 하위 도구 집합의 경로를 지정합니다.If the key has a subkey, MSBuild uses it to specify the path of a sub-toolset that contains additional tools. 이 경우 도구 집합은 두 키 모두에 정의되어 있는 속성 정의를 결합하여 정의됩니다.In this case, the Toolset is defined by combining the property definitions that are defined in both keys.

참고

도구 집합 속성 이름이 충돌하는 경우 하위 키 경로에 대해 정의된 값이 루트 키 경로에 대해 정의된 값을 재정의합니다.If toolset property names collide, the value that's defined for the subkey path overrides the value that's defined for the root key path.

하위 도구 집합은 VisualStudioVersion 빌드 속성이 있을 때 활성화됩니다.Sub-toolsets become active in the presence of the VisualStudioVersion build property. 이 속성은 다음 값 중 하나를 사용할 수 있습니다.This property may take one of these values:

  • “10.0”은 .NET Framework 4 하위 도구 집합을 지정합니다."10.0" specifies the .NET Framework 4 sub-toolset

  • “11.0”은 .NET Framework 4.5 하위 도구 집합을 지정합니다."11.0" specifies the .NET Framework 4.5 sub-toolset

  • “12.0”은 .NET Framework 4.5.1 하위 도구 집합을 지정합니다."12.0" specifies the .NET Framework 4.5.1 sub-toolset

    하위 도구 집합 10.0 및 11.0은 ToolsVersion 4.0과 함께 사용되어야 합니다.Sub-toolsets 10.0 and 11.0 should be used with ToolsVersion 4.0. 나중 버전에서는 하위 도구 집합 버전과 ToolsVersion이 일치해야 합니다.In later versions, the sub-toolset version and the ToolsVersion should match.

    빌드 중에 MSBuild는 자동으로 VisualStudioVersion 속성의 기본값을 확인하여 설정합니다(아직 정의되지 않은 경우).During a build, MSBuild automatically determines and sets a default value for the VisualStudioVersion property if it's not already defined.

    MSBuild는 ToolLocationHelper 열거형 값을 매개 변수로 추가하는 VisualStudioVersion 메서드에 대한 오버로드를 제공합니다.MSBuild provides overloads for the ToolLocationHelper methods that add a VisualStudioVersion enumerated value as a parameter

    하위 도구 집합은 .NET Framework 4.5에서 도입되었습니다.Sub-toolsets were introduced in the .NET Framework 4.5.

참고 항목See Also

표준 및 사용자 지정 도구 집합 구성 Standard and Custom Toolset Configurations
멀티 타기팅Multitargeting