ToolsVersion 설정 재정의

Visual Studio 및 MSBuild 프로젝트 파일의 Project 요소에 대한 ToolsVersion 특성은 Visual Studio 2019 이상에서 사용되지 않는 것으로 간주되며 안전하게 삭제할 수 있습니다. 이 문서에서는 이전 버전의 MSBuild 또는 사용자 지정 도구 집합에서의 사용에 대해 설명합니다. 표준 및 사용자 지정 도구 집합 구성을 참조하세요.

다음 세 가지 방법 중 하나로 프로젝트 및 솔루션에 대한 도구 집합을 변경할 수 있습니다.

  1. 명령줄에서 프로젝트 또는 솔루션을 빌드할 때 -ToolsVersion 스위치(또는 짧게 -tv) 사용.

  2. MSBuild 작업에서 ToolsVersion 매개 변수 설정.

  3. 솔루션 내의 프로젝트에서 $(ProjectToolsVersion) 속성 설정. 이 방법에서는 다른 프로젝트와는 다른 도구 집합 버전을 사용하여 솔루션에서 프로젝트를 빌드할 수 있습니다.

명령줄 빌드에서 프로젝트 및 솔루션의 ToolsVersion 설정 재정의

일반적으로 Visual Studio 프로젝트는 프로젝트 파일에 지정된 ToolsVersion을 사용하여 빌드되지만 명령줄에서 -ToolsVersion(또는 -tv) 스위치를 사용하여 해당 값을 재정의하고 다른 도구 집합을 사용하여 모든 프로젝트 및 프로젝트 간 종속성을 빌드할 수 있습니다. 예를 들면 다음과 같습니다.

msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug

이 예제에서 모든 프로젝트는 ToolsVersion 12.0을 사용하여 빌드됩니다. 그러나 이 항목의 뒷부분에서 우선 순위를 참조하세요.

명령줄에서 -tv 스위치를 사용하면 개별 프로젝트에서 선택적으로 $(ProjectToolsVersion) 속성을 사용하여 솔루션의 다른 프로젝트와 다른 ToolsVersion 값으로 프로젝트를 빌드할 수 있습니다.

MSBuild 작업의 ToolsVersion 매개 변수를 사용하여 ToolsVersion 설정 재정의

MSBuild 작업은 한 프로젝트로 다른 프로젝트를 빌드할 수 있는 기본 수단입니다. MSBuild 작업이 프로젝트에 지정된 것과 다른 ToolsVersion으로 프로젝트를 빌드할 수 있도록 ToolsVersion이라는 선택적 작업 매개 변수를 제공합니다. 다음 예제에서는 이 매개 변수를 사용하는 방법을 보여 줍니다.

  1. 다음 코드가 포함된 projectA.proj라는 파일을 만듭니다.

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="12.0">
    
        <Target Name="go" >
            <Message Text="projectA.proj" />
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />
    
            <MSBuild Projects="projectB.proj"
                ToolsVersion="2.0"
                Targets="go" />
        </Target>
    </Project>
    
  2. 다음 코드가 포함된 projectB.proj라는 또 다른 파일을 만듭니다.

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="12.0">
    
        <Target Name="go">
            <Message Text="projectB.proj" />
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />
        </Target>
    </Project>
    
  3. 명령 프롬프트에 다음 명령을 입력합니다.

    msbuild projectA.proj -t:go -toolsversion:3.5
    
  4. 다음 출력이 표시됩니다. projectA의 경우 명령줄의 -toolsversion:3.5 설정이 Project 태그의 ToolsVersion=12.0 설정을 재정의합니다.

    ProjectBprojectA의 작업에 의해 호출됩니다. 해당 작업에는 projectB에 대한 다른 ToolsVersion 설정을 재정의하는 ToolsVersion=2.0이 있습니다.

    Output:
      projectA.proj
      MSBuildToolsVersion: 3.5
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v3.5
    
      projectB.proj
      MSBuildToolsVersion: 2.0
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v2.0.50727
    

우선 순위

ToolsVersion을 결정하는 데 사용되는 최고부터 최하까지 우선 순위는 다음과 같습니다.

  1. 프로젝트(있는 경우)를 빌드하는 데 사용되는 MSBuild 작업의 ToolsVersion 특성.

  2. msbuild.exe 명령(있는 경우)에 사용되는 -toolsversion(또는 -tv) 스위치.

  3. 환경 변수 MSBUILDTREATALLTOOLSVERSIONSASCURRENT가 설정된 경우 현재 ToolsVersion을 사용합니다.

  4. 환경 변수 MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT가 설정되고 프로젝트 파일에 정의된 ToolsVersion이 현재 ToolsVersion보다 큰 경우 현재 ToolsVersion을 사용합니다.

  5. 환경 변수 MSBUILDLEGACYDEFAULTTOOLSVERSION이 설정되거나 ToolsVersion이 설정되지 않은 경우에는 다음 단계가 사용됩니다.

    1. 프로젝트 파일의 Project 요소에 대한 ToolsVersion 특성. 이 특성이 없으면 현재 버전이라고 간주합니다.

    2. MSBuild.exe.config 파일의 기본 도구 버전.

    3. 레지스트리의 기본 도구 버전. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하세요.

  6. 환경 변수 MSBUILDLEGACYDEFAULTTOOLSVERSION이 설정된 경우에는 다음 단계가 사용됩니다.

    1. 환경 변수 MSBUILDDEFAULTTOOLSVERSIONToolsVersion으로 설정된 경우 이 값을 사용합니다.

    2. MSBuild.exe.config에서 DefaultOverrideToolsVersion이 사용되는 경우 이 값을 사용합니다.

    3. 레지스트리에서 DefaultOverrideToolsVersion이 설정된 경우 이 값을 사용합니다.

    4. 이외에는 현재 ToolsVersion을 사용합니다.