ToolsVersion 설정 재정의Overriding ToolsVersion Settings

다음 세 가지 방법 중 하나로 프로젝트 및 솔루션에 대한 도구 집합을 변경할 수 있습니다.You can change the Toolset for projects and solutions in one of three ways:

  1. 명령줄에서 프로젝트 또는 솔루션을 빌드할 때 /ToolsVersion 스위치(또는 짧게 /tv) 사용by using the /ToolsVersion switch (or /tv, for short) when you build the project or solution from the command line

  2. MSBuild 작업에서 ToolsVersion 매개 변수 설정by setting the ToolsVersion parameter on the MSBuild task

  3. 솔루션 내의 프로젝트에서 $(ProjectToolsVersion) 속성 설정.by setting the $(ProjectToolsVersion) property on a project within a solution. 이 방법에서는 다른 프로젝트와는 다른 도구 집합 버전을 사용하여 솔루션에서 프로젝트를 빌드할 수 있습니다.This lets you build a project in a solution with a Toolset version that differs from that of the other projects.

명령줄 빌드에서 프로젝트 및 솔루션의 ToolsVersion 설정 재정의Override the ToolsVersion Settings of Projects and Solutions on Command Line Builds

일반적으로 Visual Studio 프로젝트는 프로젝트 파일에 지정된 ToolsVersion을 사용하여 빌드되지만 명령줄에서 /ToolsVersion(또는 /tv) 스위치를 사용하여 해당 값을 재정의하고 다른 도구 집합을 사용하여 모든 프로젝트 및 프로젝트 간 종속성을 빌드할 수 있습니다.Although Visual Studio projects typically build with the ToolsVersion specified in the project file, you can use the /ToolsVersion (or /tv) switch on the command line to override that value and build all of the projects and their project-to-project dependencies with a different Toolset. 예를 들면 다음과 같습니다.For example:

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

이 예제에서 모든 프로젝트는 ToolsVersion 12.0을 사용하여 빌드됩니다.In this example, all projects are built using ToolsVersion 12.0. 그러나 이 항목의 뒷부분에서 “우선 순위”를 참조하세요.(However, see the section "Order of Precedence" later in this topic.)

명령줄에서 /tv 스위치를 사용하면 개별 프로젝트에서 선택적으로 $(ProjectToolsVersion) 속성을 사용하여 솔루션의 다른 프로젝트와 다른 ToolsVersion 값으로 프로젝트를 빌드할 수 있습니다.When using the /tv switch on the command line, you can optionally use the $(ProjectToolsVersion) property in individual projects to build them with a different ToolsVersion value than the other projects in the solution.

MSBuild 작업의 ToolsVersion 매개 변수를 사용하여 ToolsVersion 설정 재정의Override the ToolsVersion Settings Using the ToolsVersion Parameter of the MSBuild Task

MSBuild 작업은 한 프로젝트로 다른 프로젝트를 빌드할 수 있는 기본 수단입니다.The MSBuild task is the primary means for one project to build another. MSBuild 작업이 프로젝트에 지정된 것과 다른 ToolsVersion으로 프로젝트를 빌드할 수 있도록 ToolsVersion이라는 선택적 작업 매개 변수를 제공합니다.To enable the MSBuild task to build a project with a different ToolsVersion than the one specified in the project, it provides an optional task parameter named ToolsVersion. 다음 예제에서는 이 매개 변수를 사용하는 방법을 보여 줍니다.The following example demonstrates how to use this parameter:

  1. 다음 코드가 포함된 projectA.proj라는 파일을 만듭니다.Create a file that's named projectA.proj and that contains the following code:

    <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라는 또 다른 파일을 만듭니다.Create another file that's named projectB.proj and that contains the following code:

    <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. 명령 프롬프트에 다음 명령을 입력합니다.Enter the following command at a command prompt:

    msbuild projectA.proj /t:go /toolsversion:3.5  
    
  4. 다음 출력이 표시됩니다.The following output appears. projectA의 경우 명령줄의 /toolsversion:3.5 설정이 Project 태그의 ToolsVersion=12.0 설정을 재정의합니다.For projectA, the /toolsversion:3.5 setting on the command line overrides the ToolsVersion=12.0 setting in the Project tag.

    ProjectBprojectA의 작업에 의해 호출됩니다.ProjectB is called by a task in projectA. 해당 작업에는 projectB에 대한 다른 ToolsVersion 설정을 재정의하는 ToolsVersion=2.0이 있습니다.That task has ToolsVersion=2.0, which overrides the other ToolsVersion settings for projectB.

    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  
    

우선 순위Order of Precedence

ToolsVersion을 결정하는 데 사용되는 최고부터 최하까지 우선 순위는 다음과 같습니다.The order of precedence, from highest to lowest, used to determine the ToolsVersion is:

  1. 프로젝트(있는 경우)를 빌드하는 데 사용되는 MSBuild 작업의 ToolsVersion 특성.The ToolsVersion attribute on the MSBuild task used to build the project, if any.

  2. msbuild.exe 명령(있는 경우)에 사용되는 /toolsversion(또는 /tv) 스위치.The /toolsversion (or /tv) switch that's used in the msbuild.exe command, if any.

  3. 환경 변수 MSBUILDTREATALLTOOLSVERSIONSASCURRENT가 설정된 경우 현재 ToolsVersion을 사용합니다.If the environment variable MSBUILDTREATALLTOOLSVERSIONSASCURRENT is set, then use the current ToolsVersion.

  4. 환경 변수 MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT가 설정되고 프로젝트 파일에 정의된 ToolsVersion이 현재 ToolsVersion보다 큰 경우 현재 ToolsVersion을 사용합니다.If the environment variable MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT is set and the ToolsVersion defined in the project file is greater than the current ToolsVersion, use the current ToolsVersion.

  5. 환경 변수 MSBUILDLEGACYDEFAULTTOOLSVERSION이 설정되거나 ToolsVersion이 설정되지 않은 경우에는 다음 단계가 사용됩니다.If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is set, or if ToolsVersion is not set, then the following steps are used:

    1. 프로젝트 파일의 Project 요소에 대한 ToolsVersion 특성.The ToolsVersion attribute of the Project element of the project file. 이 특성이 없으면 현재 버전이라고 간주합니다.If this attribute doesn't exist, it is assumed to be the current version.

    2. MSBuild.exe.config 파일의 기본 도구 버전.The default tools version in the MSBuild.exe.config file.

    3. 레지스트리의 기본 도구 버전.The default tools version in the registry. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하세요.For more information, see Standard and Custom Toolset Configurations.

  6. 환경 변수 MSBUILDLEGACYDEFAULTTOOLSVERSION이 설정된 경우에는 다음 단계가 사용됩니다.If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is not set, then the following steps are used:

    1. 환경 변수 MSBUILDDEFAULTTOOLSVERSIONToolsVersion으로 설정된 경우 이 값을 사용합니다.If the environment variable MSBUILDDEFAULTTOOLSVERSION is set to a ToolsVersion that exists, use it.

    2. MSBuild.exe.config에서 DefaultOverrideToolsVersion이 사용되는 경우 이 값을 사용합니다.If DefaultOverrideToolsVersion is set in MSBuild.exe.config, use it.

    3. 레지스트리에서 DefaultOverrideToolsVersion이 설정된 경우 이 값을 사용합니다.If DefaultOverrideToolsVersion is set in the registry, use it.

    4. 이외에는 현재 ToolsVersion을 사용합니다.Otherwise, use the current ToolsVersion.

참고 항목See Also

멀티 타기팅 Multitargeting
MSBuild 개념 MSBuild Concepts
도구 집합(ToolsVersion) Toolset (ToolsVersion)
표준 및 사용자 지정 도구 집합 구성Standard and Custom Toolset Configurations