Prise en charge de plusieurs frameworks .NET dans votre fichier projet

Lorsque vous créez un projet pour la première fois, nous vous recommandons de créer une bibliothèque de classes .NET Standard, car elle offre une compatibilité avec la plus grande gamme de projets consommants. En utilisant .NET Standard, vous ajoutez la prise en charge multiplateforme à une bibliothèque .NET par défaut. Toutefois, dans certains scénarios, vous devrez peut-être également inclure du code qui cible une infrastructure particulière. Cet article explique comment procéder pour les projets de style SDK .

Pour les projets de style SDK, vous pouvez configurer la prise en charge de plusieurs frameworks cibles (TFM) dans votre fichier projet, puis utiliser dotnet pack ou msbuild /t:pack créer le package.

Créer un projet qui prend en charge plusieurs frameworks .NET

  1. Créez une bibliothèque de classes .NET Standard dans Visual Studio ou utilisez dotnet new classlib.

    Nous vous recommandons de créer une bibliothèque de classes .NET Standard pour une meilleure compatibilité.

  2. Modifiez le fichier .csproj pour prendre en charge les frameworks cibles. Par exemple, modifier

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

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

    Veillez à modifier l’élément XML passé du singulier au pluriel (ajoutez les « s » aux balises ouvertes et fermées).

  3. Si vous avez du code qui fonctionne uniquement dans un TFM, vous pouvez utiliser #if NET45 ou #if NETSTANDARD2_0 séparer le code dépendant de TFM. (Pour plus d’informations, consultez Guide pratique pour multitarget.) Par exemple, vous pouvez utiliser le code suivant :

    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. Ajoutez les métadonnées NuGet que vous souhaitez à .csproj en tant que propriétés MSBuild.

    Pour obtenir la liste des métadonnées de package disponibles et des noms de propriétés MSBuild, consultez la cible du pack. Consultez également Contrôle des ressources de dépendance.

    Si vous souhaitez séparer les propriétés liées à la génération des métadonnées NuGet, vous pouvez utiliser une autre PropertyGrouppropriété, ou placer les propriétés NuGet dans un autre fichier et utiliser la directive MSBuild Import pour l’inclure. Directory.Build.Props et Directory.Build.Targets sont également pris en charge à partir de MSBuild 15.0.

  5. À présent, utilisez dotnet pack et le .nupkg résultant cible à la fois .NET Standard 2.0 et .NET Framework 4.5.

Voici le fichier .csproj généré à l’aide des étapes précédentes et du SDK .NET Core 2.2.

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

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

</Project>

Utilisation de frameworks redondants pour le ciblage multiple

À compter de NuGet 7.6 / .NET SDK 10.0.300, vous pouvez utiliser plusieurs TargetFrameworks valeurs qui se résolvent dans le même framework sous-jacent. Cela permet des scénarios tels que la génération de plusieurs runtimes ou le ciblage de plusieurs versions d’une application hôte à partir d’un seul projet.

Pour plus d’informations sur le fonctionnement de cette fonctionnalité avec la restauration et le pack, consultez Ciblage de plusieurs frameworks.

Voir aussi