Visual Studio 2010, 2008 버전에서는 .NET Framework 2.0, 3.5, 3.5 SP1 을 선택할 수 있는 Multi Targeting(멀티 타게팅) 기능을 제공합니다. 최신의 .NET Framework 버전을 선택하여 개발할 수 있으며, 하위 호환성 있는 개발을 위해 최신의 Visual Studio 에서 하위 .NET Framework 버전을 선택할 수 있습니다.

하지만 Visual Studio 2010, 2008 의 Multi Targeting 은 .NET Framework 1.x 를 지원하지 않습니다. 프레임워크 버전과 개발 도구간의 비호환성 문제 때문에 .NET Framework 1.x 버전은 Visual Studio 2003 으로만 개발이 가능합니다.

하지만 아래의 방법을 통하여 Visual Studio 2010, 2008, 2005 도구를 이용하여 .NET Framework 1.x 를 개발할 수 있는 환경을 구성할 수 있습니다.

기존의 Visual Studio 2003 은 MSBuild(Microsoft 통합 빌드 솔루션) 를 지원하지 않기 때문에, .NET Framework 4.0 SDK 에 포함된 MSBuild Targets 를 사용하였습니다.

   

Visual Studio 2003 으로 개발된 프로그램

아래와 같이 간단한 ConsoleApplication1 프로젝트를 만들었습니다.

이 응용 프로그램을 실행하면 다음과 같은 결과가 나옵니다.

Mscorlib.dll 의 버전이 1.0.5000.0 인 것을 확인할 수 있습니다.

   

Visual Studio 2010 으로 프로젝트 컨버팅 하기

만들어진 Visual Studio 2003 프로젝트를 Visual Studio 2010 버전으로 컨버전합니다.

컨버전이 완료되었으면 프로젝트 파일(.csproj) 을 열어 아래와 같이 수정합니다.

먼저 기존의 .NET Framework 어셈블리를 .NET Framework 1.1 의 어셈블리로 강제로 변경해 줍니다. Visual Studio IDE 에서 .NET Framework 1.1 을 추가하면 2.0 이상의 어셈블리가 추가되므로 반드시 .csproj 파일에서 변경해 주어야 합니다.

그리고 Import 노드에 Microsoft.Csharp.v1.1.targets 의 라인을 추가해 줍니다.

   

Microsoft.CSharp.v1.1.targets 파일 만들기

$(MSBuildToolsPath) 의 폴더인 C:\Windows\Microsoft.NET\Framework\v4.0.30128 경로에서 Microsoft.CSharp.targets 파일의 복사본 이름을 Microsoft.CSharp.v1.1.targets 파일로 만들어 줍니다.

위의 방법으로 Microsoft.Common.target 파일을 Microsoft.Common.v1.1.targets 파일 이름으로 복사본을 만듭니다.

 

Microsoft.CSharp.v1.1.targets 파일 수정하기

아래의 노드를 찾아서 <NoWarn> 노드의 1701; 1702 값을 제거합니다. 이 값은 .NET Framework 1.1 의 경고 값으로 사용할 수 없는 값입니다.

그리고 아래의 CSC 노드를 찾아서 ErrorReport 속성을 제거합니다. .NET Framework 1.1 SDK 의 CSC.exe 는 ErrorReport 기능이 존재하지 않기 때문입니다.

추가로 CSC 노드의 ToolPath 의 경로를 아래와 같이 수정합니다. 이 경로에 포함되는 csc.exe 를 사용하여 .NET Framework 1.1 로 빌드하는 중요한 구문입니다.

아래의 Import 노드를 찾아서 복사본으로 만들었던 Microsoft.Common.v1.1.targets 파일명으로 변경합니다.

   

Microsoft.Common.v1.1.targets 파일 수정하기

아래의 노드를 찾아 붉은 영역의 노드를 추가합니다. 만약 TargetFrameworkVersion 노드를 .csproj 파일에 명시적으로 수정하게 되면, Visual Studio 2010 은 v2.0 이상 버전으로 변경을 해야 프로젝트 파일을 로드할 수 있기 때문에 Microsoft.Common.v1.1.targets 파일에서 변경해야 합니다.

아래의 ReportingServiceTargets 노드를 찾아 주석으로 처리하거나 삭제합니다.

아래의 _DebugSymbolsIntermediatePath 노드의 ItemGroup 을 주석으로 처리합니다. $(IntermediateOutputPath) 이미 기존의 Microsoft.CSharp.targets 에서 값이 선언되었으므로 같은 값이 추가되거나 할 경우 Collection Type 으로 간주하기 때문에 이 구문은 필요가 없습니다.

마찬가지로 아래의 구문도 $(IntermediateOutputPath) 는 Collection Type 으로 처리가 되는 것을 방지하기 위해 아래의 구문도 주석으로 처리하거나 제거합니다.

아래의 구문도 위와 같은 이유로 제거하거나 주석으로 처리합니다.

아래의 Code Analysis 기능은 Visual Studio 2003 에서 통합되어 제공되지 않기 때문에 제거하거나 삭제합니다.

   

Visual Studio 2010 에서 .NET Framework 1.1 빌드 하기

모든 구성이 완료 되었으면, Visual Studio 2010 에서 ConsoleApplication 을 실행해 봅니다. 빌드가 .NET Framework 1.1 로 빌드된 것을 확인할 수 있습니다.