プロジェクト ファイルで複数の .NET フレームワークをサポートする

最初にプロジェクトを作成するときは、.NET Standard クラス ライブラリを作成することをお勧めします。これは、最も広範な使用プロジェクトとの互換性を提供するためです。 .NET Standard を使用すると、既定で クロスプラットフォーム サポート を .NET ライブラリに追加します。 ただし、シナリオによっては、特定のフレームワークを対象とするコードを含める必要がある場合もあります。 この記事では、 SDK スタイル のプロジェクトでこれを行う方法について説明します。

SDK スタイルのプロジェクトでは、プロジェクト ファイル内の複数のターゲット フレームワーク (TFM) のサポートを構成し、 dotnet pack または msbuild /t:pack を使用してパッケージを作成できます。

複数の .NET フレームワークをサポートするプロジェクトを作成する

  1. Visual Studio で新しい .NET Standard クラス ライブラリを作成するか、 dotnet new classlibを使用します。

    互換性を最大限に高める .NET Standard クラス ライブラリを作成することをお勧めします。

  2. ターゲット フレームワークをサポートするように .csproj ファイルを編集します。 たとえば、変更する

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>

    XML 要素を単数形から複数形に変更したことを確認します (開いているタグと閉じるタグの両方に "s" を追加します)。

  3. 1 つの TFM でのみ動作するコードがある場合は、 #if NET45 または #if NETSTANDARD2_0 を使用して TFM に依存するコードを分離できます。 (詳細については、「 マルチターゲットの方法」を参照してください)。たとえば、次のコードを使用できます。

    public string Platform {
       get {
    #if NET45
          return ".NET Framework"
    #elif NETSTANDARD2_0
          return ".NET Standard"
    #else
    #error This code block does not match csproj TargetFrameworks list
    #endif
       }
    }
    
  4. 必要な NuGet メタデータを MSBuild プロパティとして .csproj に追加します。

    使用可能なパッケージ メタデータと MSBuild プロパティ名の一覧については、 パック ターゲットを参照してください。 依存関係資産の制御も参照してください。

    ビルド関連のプロパティを NuGet メタデータから分離する場合は、別の PropertyGroupを使用するか、別のファイルに NuGet プロパティを配置し、MSBuild の Import ディレクティブを使用して含めることができます。 Directory.Build.Props MSBuild 15.0 以降では、 Directory.Build.Targets もサポートされています。

  5. 次に、 dotnet pack を使用し、結果の .nupkg は .NET Standard 2.0 と .NET Framework 4.5 の両方を対象としています。

上記の手順と .NET Core SDK 2.2 を使用して生成される .csproj ファイルを次に示します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
    <Description>Sample project that targets multiple TFMs</Description>
  </PropertyGroup>

</Project>

重複するフレームワークを使用したマルチターゲット

NuGet 7.6 / .NET SDK 10.0.300 以降では、同じ基になるフレームワークに解決される複数のTargetFrameworks値を使用できます。 これにより、複数のランタイムのビルドや、1 つのプロジェクトからホスト アプリケーションの複数のバージョンを対象とするシナリオが可能になります。

復元とパックでの動作の詳細については、 複数のフレームワークのターゲット設定に関するページを参照してください。

こちらも参照ください