다음을 통해 공유


MSBuild 다중 대상

업데이트: 2010년 8월

Visual Studio를 사용하면 .NET Framework의 여러 버전 중 하나에서 실행되는 응용 프로그램을 컴파일할 수 있습니다. 예를 들어, .NET Framework 버전 2.0에서 실행하기 위해 응용 프로그램을 컴파일하고 동일한 응용 프로그램을 .NET Framework 버전 4에서 실행하기 위해 컴파일할 수 있습니다. 둘 이상의 프레임워크에서 실행 가능하도록 컴파일하는 기능을 다중 대상 지정이라고 합니다.

참고

Visual Studio는 개발 컴퓨터에 현재 설치되어 있는 대부분의 .NET Framework 버전에서 실행됩니다.

다중 대상 지정에는 다음과 같은 이점이 있습니다.

  • .NET Framework의 이전 버전(예: 2.0, 3.0 및 3.5)을 대상으로 하는 응용 프로그램을 개발할 수 있습니다.

  • .NET Framework 외에 Silverlight 프레임워크 등의 다른 프레임워크를 대상으로 지정할 수 있습니다.

  • 대상 프레임워크의 미리 정의된 하위 집합인 프레임워크 프로필을 대상으로 지정할 수 있습니다.

  • .NET Framework 버전 4의 서비스 팩이 릴리스될 경우 이러한 팩을 대상으로 지정할 수 있습니다.

  • 다중 대상 지정은 해당 대상 프레임워크에서 사용 가능한 기능만 응용 프로그램에서 사용되도록 합니다.

대상 프레임워크는 프로젝트가 빌드되어 실행되는 특정 버전의 .NET Framework입니다. 대상 프레임워크를 사용하면 해당 버전의 .NET Framework 2.0 전용 컴파일러 기능을 사용하거나 해당 버전의 프레임워크에만 포함된 어셈블리를 참조할 수 있습니다.

특정 프레임워크를 대상으로 하도록 응용 프로그램을 컴파일하는 경우 다음 세 가지 소프트웨어 구성 요소를 조정해야 합니다.

  • 도구 집합. 응용 프로그램을 만드는 데 사용되는 컴파일러, 작업 및 대상을 포함합니다.

  • 참조 어셈블리. 응용 프로그램을 디자인하고 빌드하는 데 사용됩니다.

  • 런타임 어셈블리. 응용 프로그램을 실행하는 데 사용됩니다.

도구 집합(ToolsVersion)

도구 집합은 MSBuild 작업, MSBuild 대상 및 도구(MSBuild 및 .NET Framework와 함께 설치됨)의 집합입니다. 도구 집합에는 csc.exe 및 vbc.exe 같은 컴파일러, 일반 대상 파일(microsoft.common.targets) 및 일반 작업 파일(microsoft.common.tasks)이 포함됩니다. 4.0 도구 집합은 대상 .NET Framework 버전 2.0, 3.0, 3.5 및 4와 함께 사용할 수 있습니다. 하지만 2.0 도구 집합은 대상 .NET Framework 버전 2.0에 대해서만 사용할 수 있습니다.

프로젝트 파일에 있는 프로젝트 요소의 ToolsVersion 특성을 다음과 같이 설정하여 도구 집합을 지정합니다.

<Project ToolsVersion="4.0" ...

대상으로 지정할 모든 프레임워크의 대상 팩이 설치되어 있으면 버전 4.0 도구 집합을 사용하여 다양한 대상 프레임워크에서 실행되는 응용 프로그램을 컴파일할 수 있습니다. 자세한 내용은 이 항목 뒷부분에 나오는 "대상 팩"을 참조하십시오.

또한 사용자가 직접 도구 집합을 만들 수도 있습니다. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하십시오.

참고

Visual Studio에는 도구 집합을 변경할 수 있는 사용자 인터페이스가 포함되어 있지 않습니다.

참조 어셈블리

일반적으로 프레임워크에는 연결된 참조 어셈블리가 있습니다. 참조 어셈블리는 코드가 없는 단순화된 어셈블리이며 공용 형식 및 멤버만 노출합니다.

Visual Studio에서는 디자인 타임 및 빌드 타임에 대상 프레임워크에 적합한 참조 어셈블리를 필터로 사용하여 해당 프레임워크와 호환되는 형식과 멤버만 사용할 수 있도록 합니다. 예를 들어, .NET Framework 버전 3.5를 대상으로 할 경우 .NET Framework 버전 4에서만 제공되는 형식 및 멤버는 참조 추가 대화 상자의 .NET 탭 같은 Visual Studio 디자이너에 표시되지 않고, 빌드 프로세스에 사용할 수 없습니다.

예를 들어 LINQ는 Visual Studio 2008에 포함된 새로운 기술입니다. .NET Framework 3.5는 LINQ 관련 어셈블리가 있는 유일한 .NET Framework 버전입니다. 따라서 프로젝트에서 특별히 .NET Framework 3.5 이상을 대상으로 지정하지 않는 한 LINQ를 사용할 수 없습니다. 마찬가지로 WPF(Windows Presentation Foundation)는 Windows Vista에 포함되어 있는데 프로젝트에서 .NET Framework 3.0 또는 그 이상 버전의 .NET Framework를 대상으로 지정하지 않는 한 WPF 응용 프로그램을 빌드할 수 없습니다.

대상 팩

참조 어셈블리는 상응하는 대상 팩이 설치되어 있어야 사용할 수 있습니다. 대상 팩에는 참조 어셈블리가 포함되고 참조 어셈블리가 나열된 FrameworkList.xml 파일도 포함됩니다. FrameworkList.xml 파일은 재배포 목록이라고도 합니다.

대상 팩은 다음 소스에서 얻을 수 있습니다.

  • .NET Framework 버전 2.0, 3.0 및 3.5용 대상 팩이 .NET Framework 버전 3.5 SP1에 포함되어 있습니다.

  • .NET Framework 버전 3.5, .NET Framework 버전 4 및 버전 4 클라이언트 프로필 및 Silverlight용 대상 팩이 Visual Studio에 포함되어 있습니다.

일반적으로 대상 팩은 .. \Program Files (x86)\Reference Assemblies\Microsoft\Framework\ 폴더에 설치됩니다. .NET Framework 버전 2.0용 대상 팩은 일반적으로 .. \Windows\Microsoft.NET\Framework\v2.0.50727\ 폴더에 설치됩니다.

명령줄에서 솔루션이나 프로젝트를 빌드할 때 msbuild.exe의 ToolsVersion 특성을 지정하면 솔루션의 각 프로젝트가 Project 요소(MSBuild)에서 ToolsVersion 특성을 지정한 경우에도 모든 프로젝트와 프로젝트 간 종속성이 이 도구 버전에 따라 빌드됩니다.

런타임 어셈블리

특정 프레임워크용 대상 팩이 설치되어 있지 않으면 Visual Studio에서 해당 프레임워크를 대상 프레임워크로 설정할 수 없습니다. 예를 들어, .NET Framework 버전 3.0을 대상으로 지정하려면 이 버전의 참조 어셈블리 및 호환되는 어셈블리가 설치되어 있어야 합니다. 런타임에 CLR(공용 언어 런타임) 퓨전 로더는 대상 프레임워크의 런타임 어셈블리에 응용 프로그램을 바인딩합니다.

대상 프레임워크 선택

기존 프로젝트의 대상 프레임워크를 선택하려면

  1. 솔루션 탐색기에서 프로젝트 노드를 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.

  2. 응용 프로그램 탭의 대상 프레임워크 목록에서 프레임워크를 선택합니다. 대상 팩이 설치되어 있는 프레임워크만 이 목록에 표시됩니다.

    Visual Studio에서는 사용자의 선택에 기반하여 프로젝트 파일의 다음 세 요소에 대해 값을 설정합니다.

    • TargetFrameworkIdentifier 요소는 다음과 같이 대상 프레임워크 이름을 지정합니다.

      <TargetFrameworkIdentifier>Silverlight</TargetFrameworkIdentifier>

      이 요소가 누락될 경우 기본값은 ".NETFramework"입니다.

    • TargetFrameworkVersion 요소는 다음과 같이 대상 프레임워크 버전을 지정합니다.

      <TargetFrameworkVersion>v3.0</TargetFrameworkVersion>

    • TargetFrameworkProfile 요소는 다음과 같이 대상 프레임워크 프로필 이름을 지정합니다.

      <TargetFrameworkProfile>Client</TargetFrameworkVersion>

      이 요소가 누락된 경우 모든 프레임워크가 대상으로 지정됩니다.

    이러한 세 가지 요소는 Visual Studio 빌드 시스템의 공통 대상에 의해 결합되어 TFM(대상 프레임워크 모니커)이라고 하는 식별자를 구성합니다.

시나리오: Visual Studio에서 .NET Framework 버전 3.5를 대상으로 하는 경우

Visual Studio가 .NET Framework 버전 4에서 실행되는 것으로 가정합니다. .NET Framework 버전 3.5를 대상으로 지정하려면 이 버전과 연결된 참조 어셈블리 및 런타임 어셈블리가 설치되어 있어야 합니다. 이러한 어셈블리는 .NET Framework 버전 3.5 SP1에 포함되어 있습니다.

이 시나리오에서 Visual Studio 디자이너는 .NET Framework 버전 3.5 참조 어셈블리로 필터링되는 어셈블리만 표시합니다. 사용자가 프로젝트를 빌드할 경우 프로젝트는 필터링된 참조 어셈블리를 사용하여 빌드됩니다. 프로젝트를 실행하면 .NET Framework 버전 3.5 런타임 어셈블리를 기반으로 프로젝트가 실행되고 이 어셈블리는 CLR 버전 2.0에 기반하여 실행됩니다.

응용 프로그램을 다른 컴퓨터에 배포할 경우에는 해당 컴퓨터에 .NET Framework 버전 3.5가 설치되어 있어야 합니다. 대상 컴퓨터에 버전 3.5가 설치되어 있는지 확인하고 필요한 경우 적합한 재배포 패키지를 사용하여 버전 3.5를 설치합니다.

두 번째 시나리오: Visual Studio가 .NET Framework 버전 4.1에서 실행되지만 .NET Framework 버전 4를 대상으로 할 경우

.NET Framework 버전 4.1을 사용할 수 있고 .NET Framework 버전 4와 4.1 모두 CLR 버전 4에서 실행되는 것으로 가정합니다. .NET Framework 버전 4.1이 설치되어 있으면 Visual Studio는 자동으로 이 버전에서 실행됩니다.

프로젝트가 .NET Framework 버전 4를 대상으로 할 경우 버전 4 참조 어셈블리는 Visual Studio 디자이너에서 사용 가능한 형식 및 멤버를 필터링하게 됩니다. 이 프로젝트는 해당 참조 어셈블리를 사용하여 빌드되고, 빌드된 응용 프로그램은 버전 4 런타임 어셈블리를 사용하여 실행됩니다.

참고 항목

개념

디자인 타임에 어셈블리 확인

MSBuild 고급 개념

변경 기록

날짜

변경 내용

이유

2010년 8월

MSBuild를 사용하여 특정 버전의 .NET Framework를 대상으로 지정 항목이 이 항목에 병합되었습니다.

향상된 기능 관련 정보