표준 및 사용자 지정 도구 집합 구성

MSBuild 3.5에는 두 개의 미리 정의된 도구 집합이 포함되어 있습니다. 도구 집합은 프로젝트를 빌드하는 데 사용할 수 있는 작업, 대상 및 명령줄 도구의 집합입니다. 또한 사용자가 직접 도구 집합을 만들 수도 있습니다.

참고

계속 진행하기 전에 MSBuild를 사용하여 특정 버전의 .NET Framework를 대상으로 지정을 읽으면 도구 집합, 대상 프레임워크 및 ToolsVersion을 보다 잘 이해하는 데 도움이 됩니다.

도구 집합 형식

사용자 지정 도구 집합을 정의하면 $(MSBuildToolsPath)가 가리키는 디렉터리의 값도 정의됩니다. 따라서 프로젝트 파일의 작업 및 대상 값을 하드 코딩하는 대신 프로젝트 파일의 $(MSBuildToolsPath)를 사용하여 작업과 대상을 가져올 수 있습니다. 이렇게 하면 레지스트리나 구성 파일에 도구 집합을 전역적으로 정의하여 개발자 데스크톱이나 빌드 작업실 시나리오에서 도구 집합을 빌드할 수 있습니다.

도구 집합을 사용하면 MSBuild에서 특정 .NET Framework 버전을 대상으로 하도록 지정할 수 있습니다. 즉, Visual Studio 2008에서만 작동하는 프로젝트를 빌드할 수 있을 뿐 아니라 Visual Studio 2008에서 Visual Studio 2005 프로젝트를 빌드할 수도 있습니다.

Visual Studio 2008에는 두 개의 "표준" 도구 집합이 포함되어 있습니다. Visual Studio 2005의 MSBuild 2.0에도 포함되어 있는 하나의 도구 집합은 .NET Framework 2.0을 대상으로 하고 MSBuild 3.5에 포함되어 있는 다른 도구 집합은 .NET Framework 2.0, .NET Framework 3.0 및 .NET Framework 3.5를 대상으로 합니다.

표준 도구 집합 구성

MSBuild 3.5에는 다음과 같은 표준 도구 집합이 포함되어 있습니다.

ToolsVersion

MSBuildToolsPath 또는 MSBuildBinPath

2.0

<Windows installation path>\Microsoft.Net\Framework\v2.0.50727\

3.5

<Windows installation path>\Microsoft.NET\Framework\v3.5.20223\

표준 도구 집합은 해당 도구 집합의 정보가 MSBuild.exe.config 파일이나 호스트별 구성 파일에서 재정의되지 않는 한 MSBuild.exe를 실행하거나 MSBuild 엔진의 인스턴스를 만들 때 컴퓨터의 아무 위치에서나 사용할 수 있습니다.

프로젝트 파일의 프로젝트 태그에 특성으로 지정되는 ToolsVersion 값은 Visual Studio에서 생성된 프로젝트에 사용되는 도구 집합을 결정합니다. ToolsVersion은 도구 집합의 "이름"으로 간주할 수 있습니다. 프로젝트에 ToolsVersion이 지정되지 않은 경우 기본 ToolsVersion이 사용됩니다. MSBuild 3.5의 경우 기본 ToolsVersion 값이 2.0으로 설정됩니다. 즉, ToolsVersion을 명시적으로 지정하지 않고 빌드된 프로젝트에서는 Visual Studio 2005에 포함된 2.0 도구 집합이 사용됩니다. Visual Studio 2010 프로젝트의 경우 모든 프로젝트가 ToolsVersion 값 3.5를 사용하여 생성됩니다. 이 프로젝트는 이 새 도구 집합을 사용하므로 세 가지 .NET Framework 버전을 모두 대상으로 할 수 있습니다.

표준 도구 집합 정보는 다음과 같은 레지스트리 키에 정의됩니다.

레지스트리 하이브

문자열 키 이름

문자열 키 값

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\3.5\

DefaultToolsVersion

2.0

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0\

ToolsPath

.NET Framework 2.0 설치 경로

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5\

ToolsPath

.NET Framework 3.5 설치 경로

DefaultToolsVersion은 도구 집합을 지정하지 않는 프로젝트를 빌드할 때 사용할 도구 집합을 지정합니다. 예를 들어 Visual Studio 2010의 MSBuild에 대한 DefaultToolsVersion 값은 2.0입니다. DefaultToolsVersion의 값은 호스트별 구성 파일에서 재정의할 수 있습니다. 다른 값은 .NET Framework 버전의 설치 경로를 정의합니다.

참고

필요한 경우가 아니면 이러한 설정은 변경하지 않는 것이 좋습니다. 그러나 다음 단원에서 설명하는 것처럼 사용자 고유의 설정을 추가하고 컴퓨터 전체 사용자 지정 도구 집합 정의를 정의할 수 있습니다.

사용자 지정 도구 집합 정의

표준 도구 집합에서 빌드 요구 사항을 충족하지 않는 경우 사용자 지정 도구 집합을 만들 수 있습니다. 예를 들어 Visual C++ 프로젝트를 빌드하기 위한 별도의 빌드 시스템이 필요한 빌드 랩 시나리오에서 사용자 지정 도구 집합을 사용하면 프로젝트를 만들거나 MSBuild.exe를 실행할 때 ToolsVersion 특성에 사용자 지정 값을 할당할 수 있습니다. 이렇게 하면 $(MSBuildToolsPath) 속성을 사용하여 해당 디렉터리에서 .targets 파일을 가져올 수도 있습니다.

MSBuild.exe(또는 MSBuild 엔진을 호스팅하는 별도의 도구가 있는 경우, MSBuild의 사용자 지정 호스트)의 구성 파일에 사용자 지정 도구 집합을 지정합니다. 예를 들어, MSBuild.exe의 구성 파일에 다음과 같은 도구 집합 정의가 포함될 수 있습니다.

<msbuildToolsets default="3.0">
   <toolset toolsVersion="4.0">
      <property name="MSBuildToolsPath" 
        value="C:\Windows\Microsoft .NET\Framework\v3.0" />
   </toolset>
</msbuildToolsets>

<msbuildToolsets>는 다음과 같이 구성 파일에서도 정의되어야 하는 사용자 지정 .NET 구성 섹션입니다.

<configSections>
   <section name="msbuildToolsets"       
       Type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection, 
       Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a"
   </section>
</configSections>

참고

이 코드를 제대로 읽으려면 configSections 태그가 구성 태그 바로 아래에 나오는 첫 번째 태그여야 합니다.

ToolsetConfigurationSection은 사용자 지정 구성의 모든 호스트에서 사용할 수 있는 사용자 지정 구성 섹션입니다. 사용자 지정 도구 집합을 사용할 경우 다른 작업 없이 호스트는 구성 파일 항목을 제공하기만 하면 빌드 엔진을 초기화할 수 있습니다. 레지스트리 항목을 정의하여 MSBuild.exe, Visual Studio 및 모든 MSBuild 호스트에 적용되는 컴퓨터 전체 도구 집합을 지정할 수 있습니다.

참고

구성 파일에서 레지스트리에 이미 정의된 ToolsVersion 설정을 정의할 경우 두 정의는 병합되지 않습니다. 구성 파일의 정의가 우선하며 해당 ToolsVersion에 대한 레지스트리의 설정은 무시됩니다.

다음 속성은 프로젝트에 사용되는 ToolsVersion의 값에만 사용됩니다.

  • $(MSBuildBinPath) - MSBuildBinPath는 ToolsVersion이 정의된 구성 파일이나 레지스트리에 지정된 ToolsPath 값으로 설정됩니다. 레지스트리 또는 구성 파일의 $(MSBuildToolsPath) 설정은 도구 집합의 위치를 지정하며, 프로젝트 파일에서 $(MSBuildBinPath) 속성이나 $(MSBuildToolsPath) 속성으로 매핑됩니다.

  • $(MSBuildToolsPath) - 이 예약 속성은 구성 파일에 지정된 MSBuildToolsPath 속성에 의해 제공됩니다. 이 속성은 $(MSBuildBinPath)를 대체합니다. 그러나 $(MSBuildBinPath)는 호환성을 위해 계속 제공됩니다.

MSBuildToolsPath 속성을 추가하기 위해 사용하는 것과 동일한 구문을 사용하여 구성 파일에 사용자 지정 ToolsVersion별 속성을 추가할 수도 있습니다. 이러한 사용자 지정 속성은 구성 파일에 지정된 것과 동일한 이름을 사용하여 프로젝트 파일에서 사용할 수 있습니다.

참고 항목

개념

MSBuild 고급 개념