MSBuild를 사용하여 특정 .NET Framework를 대상으로 지정
업데이트: 2007년 11월
Visual Studio 2008 및 MSBuild 3.5에서는 프로젝트를 만들거나 빌드할 때 여러 버전의 .NET Framework(버전 2.0, 3.0 및 3.5)를 대상으로 지정할 수 있습니다. 이 기능을 다중 대상 지정이라고 합니다. MSBuild에서는 Project 요소(MSBuild)의 새 ToolsVersion 특성을 사용하여 다중 대상 지정을 수행합니다.
도구 집합, 대상 프레임워크 및 ToolsVersion
Visual Studio 2008에서 MSBuild가 작동하는 방법을 이해하려면 도구 집합과 대상 프레임워크의 차이점 및 도구 집합과 대상 프레임워크가 새 ToolsVersion 특성과 어떠한 관련이 있는지 알아야 합니다. 이러한 사항은 모두 MSBuild 3.5에서 프로젝트를 빌드하는 방법을 결정하는 데 사용됩니다.
도구 집합
도구 집합은 MSBuild 작업, MSBuild 대상 및 도구(MSBuild 및 .NET Framework와 함께 설치됨)의 집합입니다. 도구 집합에는 csc.exe 및 vbc.exe 같은 컴파일러, 일반 대상 파일(microsoft.common.targets) 및 일반 작업 파일(microsoft.common.tasks)이 포함됩니다. 3.5 도구 집합은 대상 .NET Framework 버전 2.0 및 3.0과 함께 사용할 수 있지만 2.0 도구 집합은 대상 .NET Framework 버전 2.0과 함께만 사용할 수 있습니다.
Visual Studio 2008에서는 .NET Framework 2.0 및 .NET Framework 3.5용으로 미리 정의된 두 개의 도구 집합이 포함된 .NET Framework 3.5를 설치합니다. Windows Vista에 포함된 .NET Framework 3.0에 대해서는 도구 집합이 정의되어 있지 않습니다. .NET Framework 2.0 도구 집합은 .NET Framework 2.0만 대상으로 지정할 수 있지만 .NET Framework 3.5 도구 집합은 .NET Framework 버전 2.0, 3.0 또는 3.5를 대상으로 지정할 수 있습니다.
또한 사용자가 직접 도구 집합을 만들 수도 있습니다. 자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하십시오.
대상 프레임워크
대상 프레임워크는 프로젝트가 빌드되어 실행되는 특정 버전의 .NET Framework입니다. 대상 프레임워크를 사용하면 해당 버전의 .NET Framework 2.0 전용 컴파일러 기능을 사용하거나 해당 버전의 프레임워크에서만 제공하는 어셈블리를 참조할 수 있습니다.
현재 다음과 같은 세 가지 .NET Framework 버전을 Visual Studio 2008에서 사용할 수 있습니다.
.NET Framework 2.0(Visual Studio에 포함됨)
.NET Framework 3.0(Windows Vista에 포함됨)
.NET Framework 3.5(Visual Studio 2008에 포함됨)
세 가지 .NET Framework 버전이 있지만 세 가지 버전 모두 Visual Studio 2005에 포함된 동일한 기본 CLR(공용 언어 런타임) 버전 2.0을 기반으로 합니다.
대상 프레임워크 버전은 TargetFrameworkVersion 속성을 통해 프로젝트 파일에 지정됩니다. IDE(통합 개발 환경)를 통해 대상 프레임워크 버전을 전환하면 Visual Studio에서 이 값을 설정합니다. 자세한 내용은 방법: 특정 .NET Framework를 대상으로 지정을 참조하십시오. TargetFrameworkVersion 값은 v2.0, v3.0 및 v3.5가 될 수 있으며, 다음과 같이 MSBuild 속성으로 지정됩니다.
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
ToolsVersion 특성
도구 집합 버전은 프로젝트 파일의 Project 요소(MSBuild)에 있는 ToolsVersion 특성으로 지정할 수 있습니다. 다음 예제에서는 .NET Framework 2.0 2.0 도구 집합을 사용하여 프로젝트를 빌드해야 함을 보여 줍니다.
<Project ToolsVersion="2.0" ... </Project>
명령줄에서 솔루션이나 프로젝트를 빌드할 때 msbuild.exe의 ToolsVersion을 지정하면 솔루션의 각 프로젝트가 Project 요소(MSBuild)에서 자체 ToolsVersion을 지정한 경우에도 모든 프로젝트와 프로젝트 간 종속성이 이 ToolsVersion에 따라 빌드됩니다.
.NET Framework 버전 간의 차이점
세 가지 버전의 .NET Framework는 모두 CLR 버전 2.0을 기반으로 합니다. 이 세 가지 버전의 .NET Framework는 프로젝트에서 참조할 수 있는 어셈블리 목록이 서로 다릅니다. 예를 들어, 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 응용 프로그램을 빌드할 수 없습니다.
자세한 내용은 표준 및 사용자 지정 도구 집합 구성을 참조하십시오.
프로젝트에서 도구 집합을 찾는 방법
프로젝트를 만들려면 Visual Studio 2008에 도구 집합이 있어야 합니다. MSBuild에서는 $(MSBuildToolsPath) 속성을 사용하여 대상과 작업을 찾습니다. 예를 들어, MSBuild에서는 다음 XML 요소를 사용하여 Microsoft.CSharp.targets 파일을 찾습니다.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Microsoft.CSharp.targets는 Visual Studio 2008에서 Visual C# 프로젝트를 빌드하기 위해 사용하는 언어별 빌드 프로세스의 예입니다. $(MSBuildToolsPath)는 Microsoft.CSharp.targets가 설치되는 적절한 버전의 .NET Framework에 대한 경로(예: C:\Windows\Microsoft.Net\Framework\v2.0.50727)로 변환됩니다.
MSBuild 3.5 도구 집합은 이 프로젝트를 빌드하기 전에 $(MSBuildToolsPath)를 MSBuild 3.5의 설치 위치로 변환하여 Microsoft.CSharp.targets의 Visual Studio 2008 버전을 가져와야 합니다.
$(MSBuildToolsPath)는 ToolsVersion에 따라 다른 값을 가지므로 ToolsVersion 값을 기반으로 다른 도구 집합을 가져옵니다. 이 유연한 시스템에서는 프로젝트, MSBuild 호스트 또는 사용자가 프로젝트를 빌드하는 데 사용해야 하는 도구 집합을 지정할 수 있을 뿐 아니라 MSBuild에서 위치 정보를 사용하여 올바른 도구 집합을 선택하는 방법을 지정할 수도 있습니다.
ToolsVersion 특성의 작동 방법
Visual Studio 2008에서 새 프로젝트를 만들거나 기존 프로젝트를 업그레이드하면 ToolsVersion 특성이 자동으로 프로젝트 파일에 포함되고 기본값인 "3.5"로 설정됩니다. 자세한 내용은 특정 .NET Framework를 대상으로 지정을 참조하십시오.
프로젝트 파일에 ToolsVersion 값이 정의되어 있으면 MSBuild에서는 이 값을 사용하여 MSBuild 도구의 경로인 $(MSBuildToolsPath)(또는 $(MSBuildBinPath))를 결정합니다. ToolsVersion 값이 정의되어 있지 않은 경우 MSBuild에서는 프로젝트가 Visual Studio 2005 프로젝트인 것으로 가정하기 때문에 이전 도구 집합 경로를 계속 사용합니다.
Visual Studio 2008에서 기존 Visual Studio 2005 프로젝트를 열면 Visual Studio 2008에서 3.5 도구 집합을 사용하여 빌드하는 것만 지원하기 때문에 프로젝트가 "ToolsVersion=3.5"를 포함하도록 실제로 "업그레이드"됩니다. 따라서 Visual Studio 2008에서 프로젝트를 빌드하면 Visual Studio 도구 집합(2.0) 대신 Visual Studio 2008 도구 집합(3.5)이 사용됩니다.
2.0 도구 집합을 사용하여 만든 프로젝트는 .NET Framework 2.0을 대상으로 지정할 수 있고 3.5 도구 집합을 사용하여 만든 프로젝트는 버전 2.0, 3.0 또는 3.5의 .NET Framework를 대상으로 지정할 수 있습니다. Visual Studio 프로젝트가 Visual Studio 2008로 마이그레이션되고 3.5 도구 집합을 사용하도록 업그레이드된 경우에도 프로젝트의 대상 프레임워크는 계속 .NET Framework 2.0입니다. 이것은 프로젝트를 Visual Studio 2008로 마이그레이션할 때 새 종속성이 생기지 않도록 합니다. 프로젝트는 계속 Visual Studio에서와 동일하게 빌드됩니다.
참고: |
---|
프로젝트에 ToolsVersion이 이미 정의되어 있는 경우 Visual Studio 2008에서는 해당 값을 변경하지 않습니다. ToolsVersion 값은 재정의될 수 있습니다. 자세한 내용은 ToolsVersion 설정 재정의를 참조하십시오. |
Visual Studio 2005 및 MSBuild 3.5 호환성
Visual Studio 2005에서는 Visual Studio 2008 프로젝트나 Visual Studio 2008로 업그레이드된 프로젝트를 열거나 빌드할 수 없습니다. 그러나 LINQ와 같은 Visual Studio 2008 도구 집합에 고유한 새 기능이나 새 Visual C# 2008 또는 Visual Basic 2008 구문 기능을 사용하지 않는 경우에는 MSBuild 2.0 도구 집합을 사용하여 Visual Studio 2008 프로젝트를 빌드할 수 있습니다.