IT_Programming/C#

VS2005에서 Framework 1.1로 빌드 하기

JJun ™ 2007. 9. 2. 10:58

출처 : http://blogs.msdn.com/jomo_fisher/articles/410896.aspx

 

1. 아래의 코드를 메모장에 붙여 넣는다.

 

<!--
Use of included script samples are subject to the terms specified at

http://www.microsoft.com/info/cpyright.htm
Written by Jomo Fisher
-->
<Project
 DefaultTargets="Build"
 xmlns="
http://schemas.microsoft.com/developer/msbuild/2003">

 <!--
 These two property groups inform VS that there is a Platform called .NET 1.1.
 -->
 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|.NET 1.1' ">
  <DebugSymbols Condition="'$(DebugSymbols)'==''">true</DebugSymbols>
  <DebugType Condition="'$(DebugType)'==''">full</DebugType>
  <Optimize Condition="'$(Optimize)'==''">false</Optimize>
  <OutputPath Condition="'$(OutputPath)'==''">bin\.NET 1.1\Debug\</OutputPath>
  <DefineConstants Condition="'$(DefineConstants)'==''">DEBUG;TRACE</DefineConstants>
  <DefineConstants>$(DefineConstants);TARGETTING_FX_1_1</DefineConstants>
  <ErrorReport></ErrorReport>
  <WarningLevel Condition="'$(WarningLevel)'==''">4</WarningLevel>
  <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
  <CscToolPath>$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322</CscToolPath>
  <TargetFrameworkVersion>v1.0</TargetFrameworkVersion>
 </PropertyGroup>

 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|.NET 1.1' ">
  <DebugType Condition="'$(DebugType)'==''">pdbonly</DebugType>
  <Optimize Condition="'$(Optimize)'==''">true</Optimize>
  <OutputPath Condition="'$(OutputPath)'==''">bin\.NET 1.1\Release\</OutputPath>
  <DefineConstants Condition="'$(DefineConstants)'==''">TRACE</DefineConstants>
  <DefineConstants>$(DefineConstants);TARGETTING_FX_1_1</DefineConstants>
  <ErrorReport></ErrorReport>
  <WarningLevel Condition="'$(WarningLevel)'==''">4</WarningLevel>
  <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
  <CscToolPath>$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322</CscToolPath>
  <TargetFrameworkVersion>v1.0</TargetFrameworkVersion>
 </PropertyGroup>

 <!--
 Import the standard C# targets
 -->
 <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

 <!--
 Now that the standard targets have been brought in. Override some properties
 and items it created.
 -->
 <PropertyGroup>
  <AvailablePlatforms>$(AvailablePlatforms),.NET 1.1</AvailablePlatforms>

  <AssemblySearchPaths Condition=" '$(Platform)' == '.NET 1.1' ">
   {CandidateAssemblyFiles};
   $(ReferencePath);
   {HintPathFromItem};
   {TargetFrameworkDirectory};
   {AssemblyFolders};
   $(OutputPath);
   {GAC}
  </AssemblySearchPaths>

  <TargetFrameworkDirectory Condition=" '$(Platform)' == '.NET 1.1'">
   $(SystemRoot)\Microsoft.NET\Framework\v1.1.4322
  </TargetFrameworkDirectory>

 </PropertyGroup>

 <ItemGroup Condition=" '$(Platform)' == '.NET 1.1'">
  <TargetFrameworkDirectoryItem Include="$(SystemRoot)\Microsoft.NET\Framework\v1.1.4322">
   <InProject>false</InProject>
  </TargetFrameworkDirectoryItem>
 </ItemGroup>

 <!--
 Override this target from Microsoft.Common.Targets so that we can supply our own
 value for $(TargetFrameworkDirectory). This controls where assembly resolution
 logic finds FX assemblies.
 -->
 <Target
        Name="GetFrameworkPaths"
        DependsOnTargets="$(GetFrameworkPathsDependsOn)">

  <!-- Get the path to the target .NET framework directory. -->
  <GetFrameworkPath
   Condition=" '$(Platform)' != '.NET 1.1' ">
   <Output TaskParameter="Path" PropertyName="TargetFrameworkDirectory"/>
   <Output TaskParameter="Path" ItemName="TargetFrameworkDirectoryItem"/>
  </GetFrameworkPath>

  <!-- Get the path to the target .NET framework SDK directory. -->
  <GetFrameworkSDKPath
   Condition=" '$(Platform)' != '.NET 1.1' ">
   <Output TaskParameter="Path" PropertyName="TargetFrameworkSDKDirectory"/>
   <Output TaskParameter="Path" ItemName="TargetFrameworkSDKDirectoryItem"/>
  </GetFrameworkSDKPath>

 </Target>

 <!--
 For 1.1 builds, intercept the call to CorResGen target (which generates 2.0 resources) and
 slip in a call to our own CoreResGen_1_1.
 
 Handily, the devices version of the ResGen task is able to call the 1.1 version of
 ResGen directly.
 -->
 <UsingTask TaskName="CFResGen" AssemblyFile="$(MSBuildBinPath)

\Microsoft.CompactFramework.Build.Tasks.dll" />
 <PropertyGroup Condition="'$(Platform)' == '.NET 1.1'">
  <ResGenDependsOn>ResolveAssemblyReferences;BeforeResGen;CoreResGen_1_1;AfterResGen</ResGenDependsOn>
 </PropertyGroup>
 <Target
        Name="CoreResGen_1_1"
        DependsOnTargets="$(CoreResGenDependsOn)">
 
  <CFResGen
            Condition = "
'@(ResxWithNoCulture)' != ''"
            Sources = "@(ResxWithNoCulture)"
            UseSourcePath = "$(UseSourcePath)"
            StateFile = "$(IntermediateOutputPath)$(MSBuildProjectFile).CrossCompileResGen.Cache"
            OutputResources = "@(ManifestResourceWithNoCultureName->'$(IntermediateOutputPath)%

(Identity).resources')"
        >
   <!-- Appending to 'FilesWritten' list lets us be part of Clean and Incremental Clean. -->
   <Output TaskParameter = "FilesWritten" ItemName="FileWrites"/>
   <Output TaskParameter = "OutputResources" ItemName="ManifestResourceWithNoCulture"/>
  </CFResGen>

  <CFResGen
            Condition = "
'@(ResxWithCulture)' != ''"
            Sources = "@(ResxWithCulture)"
            UseSourcePath = "$(UseSourcePath)"
            StateFile = "$(IntermediateOutputPath)$(MSBuildProjectFile).CrossCompileResGen.Cache"
            OutputResources = "@(ManifestResourceWithCultureName->'$(IntermediateOutputPath)%

(Identity).resources')"
        >
   <!-- Appending to 'FilesWritten' list lets us be part of Clean and Incremental Clean. -->
   <Output TaskParameter = "FilesWritten" ItemName="FileWrites"/>
   <Output TaskParameter = "OutputResources" ItemName="ManifestResourceWithCulture"/>
  
  </CFResGen>
 </Target>

</Project>


2. 파일 이름을 CrossCompile.CSharp.targets로 한다.

 

3. CrossCompile.CSharp.targets이라는 이름의 파일을 C:\에서 msbuild라는 폴더를 검색하고

    해당 폴더에 파일을 Copy 한다.

 

4. C# 콘솔 프로젝트를 생성한다.

 

5. 메모장을 열고 MyApp.cspro파일의 <import>라는 파일을 아래와 같이 변경한다.

 <Import Project="$(MSBuildExtensionsPath)\CrossCompile.CSharp.targets" />


6. 프롬프트에서 프로젝트를 다시 로드 한다.

 

7. 보안 다이얼로그가 활성화되면  Load Project Normally를 선택한다.

 

8. VS에서 ‘Any CPU’ 와 ‘Configuration Manager’를 선택한다.

 

9. Active Solution Platform 에서 <new>를 선택한다.

 

10. .NET 1.1을 선택하고 OK를 클릭한다.

 

11. using System.Collections.Generic, System.Collections.Generic을 삭제한다.

 

12. 11번은 닷넷 1.1에서는 지원하지 않는다.