2014年4月17日

.NET バージョン毎にプロジェクトを分けてソースを共有する

たまに、複数の .NET バージョンでモノが欲しい時がある。
その際、複数のプロジェクトファイル(.NET バージョン違い)に同じソース群を参照させる。
その手順のメモ。

※元となるプロジェクトファイルは「MyLibrary.csproj」、バージョンは .NET 4.0 とする。
  1. プロジェクトファイル(csproj/vbproj)を複製
    MyLibrary.csproj → MyLibrary_net35.csproj
  2. バージョン変更する方のプロジェクトファイルの /Project/PropertyGroup/TargetFrameworkVersion を変更
    ・MyLibrary_net35.csproj
    
    <Project ToolsVersion="4.0" DefaultTargets="Build"
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <!-- 中略 -->
        <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    
  3. 両方のプロジェクトファイルに /Project/PropertyGroup/BaseIntermediateOutputPath + BaseOutputPath を追加し、/Project/PropertyGroup[@Condition]/OutputPath を変更
    (中間ファイルとバイナリの出力先の変更)
    ・MyLibrary.csproj
    
    <Project ToolsVersion="4.0" DefaultTargets="Build"
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <BaseIntermediateOutputPath>obj\net40\</BaseIntermediateOutputPath>
        <BaseOutputPath>bin\net40\</BaseOutputPath>
    
    ・MyLibrary_net35.csproj
    
    <Project ToolsVersion="4.0" DefaultTargets="Build"
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <BaseIntermediateOutputPath>obj\net35\</BaseIntermediateOutputPath>
        <BaseOutputPath>bin\net35\</BaseOutputPath>
    
    ・両方
    
    <Project ToolsVersion="4.0" DefaultTargets="Build"
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <!-- 中略 -->
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '{構成設定}' "">
        <!-- 中略 -->
        <!-- 必要に応じて $(Platform) もパスに組み込む(マルチプラットフォーム等) -->
        <OutputPath>$(BaseOutputPath)\$(Configuration)\</OutputPath>
    
  4. Visual Studio で変更したプロジェクトファイルを再読込
  5. Visual Studio で複製したプロジェクトファイルを追加読込
    ソリューションを右クリック → [追加] → [既存のプロジェクト]
  6. .NET のバージョンに合わせたコード修正

備考

バイナリ出力先を分けるのは当然として、中間ファイル出力先を分けておかないと、Visual Studio の挙動がおかしくなることがある。リビルドでないと、ビルド成功しなかったり・・・
※複数プロジェクトで中間ファイル出力先がかぶることは、Visual Studio でビルド失敗する原因の 1 つ

中間ファイル出力先は、IntermediateOutputPath で構成設定毎に指定することも可能。
ただし、中間ファイル出力先を変更しても、「obj\Debug」「obj\Release」などのフォルダは作られる・・・

参考URL

0 件のコメント:

コメントを投稿