Podpora více rozhraní .NET Framework v souboru projektu

Při prvním vytvoření projektu doporučujeme vytvořit knihovnu tříd .NET Standard, protože poskytuje kompatibilitu s nejširší škálou náročných projektů. Pomocí .NET Standard přidáte do knihovny .NET ve výchozím nastavení podporu pro různé platformy . V některých scénářích ale může být také nutné zahrnout kód, který cílí na konkrétní architekturu. V tomto článku se dozvíte, jak to udělat pro projekty ve stylu sady SDK .

U projektů ve stylu SDK můžete nakonfigurovat podporu pro více cílových rámců (TFM) ve svém projektovém souboru a pak použít dotnet pack nebo msbuild /t:pack k vytvoření balíčku.

Vytvoření projektu, který podporuje více rozhraní .NET Framework

  1. Vytvořte novou knihovnu tříd .NET Standard v sadě Visual Studio nebo použijte dotnet new classlib.

    Pro zajištění nejlepší kompatibility doporučujeme vytvořit knihovnu tříd .NET Standard.

  2. Upravte soubor .csproj tak, aby podporoval cílové architektury. Například změnit

    <TargetFramework>netstandard2.0</TargetFramework>

    to:

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

    Ujistěte se, že jste změnili element XML z jednotného čísla na množné číslo (přidejte "s" na otevřené i zavřené tagy).

  3. Pokud máte kód, který funguje jenom v jednom TFM, můžete použít #if NET45 nebo #if NETSTANDARD2_0 oddělit kód závislý na TFM. (Další informace najdete v tématu Jak používat víceodstrování.) Můžete například použít následující kód:

    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. Přidejte všechna metadata NuGet, která chcete do souboru .csproj přidat jako vlastnosti nástroje MSBuild.

    Seznam dostupných metadat balíčku a názvů vlastností MSBuild naleznete v tématu cíl balíčku. Viz také řízení souborů závislostí.

    Pokud chcete oddělit vlastnosti související se sestavením od metadat NuGetu, můžete použít jiný PropertyGroup, nebo umístit vlastnosti NuGet do jiného souboru a použít direktivu MSBuild k zahrnutí. Directory.Build.Props a Directory.Build.Targets podporují se také od MSBuild 15.0.

  5. Nyní použijte dotnet pack a výsledný .nupkg cílí na .NET Standard 2.0 i .NET Framework 4.5.

Tady je soubor .csproj , který se vygeneruje pomocí předchozích kroků a sady .NET Core SDK 2.2.

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

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

</Project>

Cílení na více verzí s duplicitními architekturami

Počínaje NuGetem 7.6 / .NET SDK 10.0.300 můžete použít více TargetFrameworks hodnot, které vedou ke stejnému základnímu rámci. To umožňuje případy použití, jako je sestavení pro více prostředí runtime nebo zaměřování na různé verze hostitelské aplikace z jednoho projektu.

Podrobnosti o tom, jak to funguje s obnovením a balíčkem, najdete v tématu Cílení na více architektur.

Viz také