Sdílet prostřednictvím


Cílové architektury v projektech ve stylu sady SDK

Když cílíte na architekturu v aplikaci nebo knihovně, zadáváte sadu rozhraní API, která chcete zpřístupnit aplikaci nebo knihovně. Cílovou architekturu v souboru projektu zadáte pomocí monikeru cílového rozhraní (TFM).

Aplikace nebo knihovna může cílit na verzi .NET Standard. Verze .NET Standard představují standardizované sady rozhraní API ve všech implementacích .NET. Knihovna může například cílit na .NET Standard 1.6 a získat přístup k rozhraním API, která fungují v rozhraních .NET Core a .NET Framework pomocí stejného základu kódu.

Aplikace nebo knihovna může také cílit na konkrétní implementaci .NET, aby získala přístup k rozhraním API pro konkrétní implementaci. Například aplikace, která cílí na Xamarin.iOS (napříkladXamarin.iOS10) má přístup k obálkám rozhraní API pro iOS poskytovaným pro IOS 10 nebo aplikaci, která cílí na Univerzální platforma Windows (UPW), má přístup k rozhraním API, uap10.0která kompilují pro zařízení s Windows 10.

V některých cílových architekturách, jako je rozhraní .NET Framework, jsou rozhraní API definována sestaveními, která rozhraní nainstaluje do systému, a mohou zahrnovat rozhraní API architektury aplikací (například ASP.NET).

Pro cílové architektury založené na balíčcích (například .NET 5 nebo .NET Core a .NET Standard) jsou rozhraní API definovaná balíčky NuGet, které jsou součástí aplikace nebo knihovny.

Nejnovější verze

Následující tabulka definuje nejběžnější cílové architektury, způsob jejich odkazování a verzi .NET Standard, kterou implementují. Tyto cílové verze architektury jsou nejnovější stabilní verze. Předběžné verze se nezobrazují. Moniker cílové architektury (TFM) je standardizovaný formát tokenu pro určení cílové architektury aplikace nebo knihovny .NET.

Cílová architektura Nejnovější
stabilní verze
Moniker cílové architektury (TFM) Implementovaný
Verze .NET Standard
.NET 9 9 net9.0 2.1
.NET 8 8 net8.0 2.1
.NET Standard 2.1 netstandard2.1
.NET Core 3.1 netcoreapp3.1 2.1
.NET Framework 4.8.1 net481 2.0

Podporované cílové architektury

Na cílovou architekturu obvykle odkazuje TFM. Následující tabulka ukazuje cílové architektury podporované sadou .NET SDK a klientem NuGet. Ekvivalenty se zobrazují v hranatých závorkách. Například win81 je ekvivalentní TFM .netcore451

Cílová architektura TFM
.NET 5+ (a .NET Core) netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp3.0
netcoreapp3.1
net5.0*
net6.0*
net7.0*
net8.0*
.NET Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard2.1
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
net481
Windows Store netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Framework netmf
Silverlight sl4
sl5
Windows Phone wp [wp7]
wp7
wp75
wp8
wp81
wpa81
Univerzální platforma Windows uap [uap10.0]
uap10.0 [win10] [netcore50]

* .NET 5 a novější TFM zahrnují některé varianty specifické pro operační systém. Další informace najdete v následující části tfmy specifické pro operační systém .NET 5 nebo novější.

TFM pro konkrétní operační systém .NET 5 nebo novější

Mezi net5.0technologie , , net6.0net7.0a net8.0net.0 TFM patří technologie, které fungují na různých platformách. Zadáním sady TFM specifické pro operační systém jsou rozhraní API specifická pro operační systém dostupná pro vaši aplikaci, například vazby model Windows Forms nebo iOS. TFM specifické pro operační systém také dědí každé rozhraní API dostupné pro jejich základní TFM, net9.0 například TFM.

Rozhraní .NET 5 zavedlo net5.0-windows TFM specifické pro operační systém, které zahrnuje vazby specifické pro Windows pro rozhraní API WinForms, WPF a UPW. Verze .NET 6 a novější mají další tfmy specifické pro operační systém, například net6.0-ios.

Následující tabulka ukazuje kompatibilitu tfmů .NET 5 a více.

TFM Kompatibilní s
net5.0 net1.. 4 (s upozorněním NU1701)
netcoreapp1.. 3.1 (upozornění při odkazování na WinForms nebo WPF)
netstandard1.. 2.1
net5.0-windows netcoreapp1.. 3.1 (plus vše ostatní zděděno z net5.0)
net6.0 (Následná verze net5.0)
net6.0-android xamarin.android (plus vše ostatní zděděno z net6.0)
net6.0-ios Vše zděděno z net6.0
net6.0-maccatalyst Vše zděděno z net6.0
net6.0-macos Vše zděděno z net6.0
net6.0-tvos Vše zděděno z net6.0
net6.0-windows (Následná verze net5.0-windows)
net7.0 (Následná verze net6.0)
net7.0-android (Následná verze net6.0-android)
net7.0-ios (Následná verze net6.0-ios)
net7.0-maccatalyst (Následná verze net6.0-maccatalyst)
net7.0-macos (Následná verze net6.0-macos)
net7.0-tizen tizen40 (plus vše ostatní zděděno z net7.0)
net7.0-tvos (Následná verze net6.0-tvos)
net7.0-windows (Následná verze net6.0-windows)
net8.0 (Následná verze net7.0)
net8.0-android (Následná verze net7.0-android)
net8.0-browser Vše zděděno z net8.0
net8.0-ios (Následná verze net7.0-ios)
net8.0-maccatalyst (Následná verze net7.0-maccatalyst)
net8.0-macos (Následná verze net7.0-macos)
net8.0-tizen (Následná verze net7.0-tizen)
net8.0-tvos (Následná verze net7.0-tvos)
net8.0-windows (Následná verze net7.0-windows)
net9.0 (Následná verze net8.0)
net9.0-android (Následná verze net8.0-android)
net9.0-browser (Následná verze net8.0-browser)
net9.0-ios (Následná verze net8.0-ios)
net9.0-maccatalyst (Následná verze net8.0-maccatalyst)
net9.0-macos (Následná verze net8.0-macos)
net9.0-tizen (Následná verze net8.0-tizen)
net9.0-tvos (Následná verze net8.0-tvos)
net9.0-windows (Následná verze net8.0-windows)

Pokud chcete aplikaci přenášet na různých platformách, ale stále máte přístup k rozhraním API pro konkrétní operační systém, můžete cílit na několik tfmů specifických pro operační systém a přidat ochranu platforem kolem volání rozhraní API specifického pro operační systém pomocí #if direktiv preprocesoru. Seznam dostupných symbolů najdete v tématu Symboly preprocesoru.

Navrhované cíle

Pomocí těchto pokynů určete, který TFM se má ve vaší aplikaci používat:

  • Aplikace, které jsou přenosné na více platforem, by měly cílit na základní TFM, net9.0například . To zahrnuje většinu knihoven, ale také ASP.NET Core a Entity Framework.
  • Knihovny specifické pro konkrétní platformu by měly cílit na varianty specifické pro konkrétní platformu. Například projekty WinForms a WPF by měly cílit net9.0-windows.
  • Multiplatformní aplikační modely (Xamarin Forms, ASP.NET Core) a balíčky mostů (Xamarin Essentials) by měly alespoň cílit na základní TFM, net9.0ale můžou také cílit na další varianty specifické pro platformu, aby se zlehčily více rozhraní API nebo funkcí.

Verze operačního systému v TFMs

Můžete také zadat volitelnou verzi operačního systému na konci TFM specifického pro operační systém, například net6.0-ios15.0. Verze označuje, která rozhraní API jsou dostupná pro vaši aplikaci nebo knihovnu. Neřídí verzi operačního systému, kterou vaše aplikace nebo knihovna podporuje za běhu. Slouží k výběru referenčních sestavení, která projekt zkompiluje, a k výběru prostředků z balíčků NuGet. Tuto verzi si můžete představit jako "verzi platformy" nebo "verzi rozhraní API operačního systému", aby byla nejednoznačná z verze operačního systému za běhu.

Pokud TFM specifický pro operační systém explicitně nezadává verzi platformy, má implicitní hodnotu, kterou lze odvodit ze základního názvu TFM a platformy. Například výchozí hodnota platformy pro Android v .NET 6 je 31.0, což znamená, že net6.0-android je zkratka pro kanonický net6.0-android31.0 TFM. Implicitní verze platformy pro novější základní TFM může být vyšší, například budoucí net8.0-android TFM by se mohl mapovat na net8.0-android34.0. Zkrácený formulář je určen pouze pro použití v souborech projektu a je rozšířen na kanonický formulář podle cílů MSBuild sady .NET SDK před předáním jiným nástrojům, jako je NuGet.

Následující tabulka uvádí výchozí hodnoty cílové platformy (TPV) pro každou verzi .NET.

Verze .NET Android iOS Mac Catalyst macOS tvOS Tizen Windows
.NET 8 34.0 17.2 17.2 14.2 17.1 7.0 10.0
.NET 9 35,0 18.0 18.0 15.0 7.0 10.0

Poznámka:

Na platformách Apple (iOS, macOS, tvOS a Mac Catalyst) v .NET 8 a starších verzích je výchozí TPV nejnovější podporovanou verzí v aktuálně nainstalované úloze. To znamená, že aktualizace úlohy iOS v .NET 8 může například vést k vyšší výchozí TPV, pokud byla v této úloze přidána podpora nové verze iOS. V předchozí tabulce je výchozí protokol TPV v počáteční verzi uvedené verze .NET.

Od verze .NET 9 se toto speciální chování vztahuje pouze na spustitelné projekty. Výchozí hodnota TPV pro projekty knihoven teď zůstává stejná pro celou hlavní verzi .NET, stejně jako všechny ostatní platformy.

Sada .NET SDK je navržená tak, aby podporovala nově vydaná rozhraní API pro jednotlivé platformy bez nové verze základní sady TFM. To vám umožní přístup k funkcím pro konkrétní platformu bez čekání na hlavní verzi .NET. K těmto nově vydaným rozhraním API můžete získat přístup zvýšením verze platformy v TFM. Pokud například platforma Android přidala rozhraní API úrovně 32 rozhraní API v aktualizaci sady .NET 6.0.x SDK, můžete k nim přistupovat pomocí TFM net6.0-android32.0.

Pořadí podle priority

Pokud vaše aplikace odkazuje na balíček, který má více prostředků pro různé TFM, jsou upřednostňované prostředky, které jsou blíže v čísle verze. Pokud například vaše aplikace cílí net6.0-ios a balíček nabízí prostředky a net6.0 net5.0-iosprostředky se net6.0 použijí. Další informace najdete v tématu Priority.

Podpora starších verzí operačního systému

I když se aplikace nebo knihovna specifická pro platformu kompiluje na rozhraní API z konkrétní verze tohoto operačního systému, můžete ji nastavit tak, aby byla kompatibilní se staršími verzemi operačního systému přidáním SupportedOSPlatformVersion vlastnosti do souboru projektu. Tato SupportedOSPlatformVersion vlastnost označuje minimální verzi operačního systému potřebnou ke spuštění aplikace nebo knihovny. Pokud v projektu explicitně nezadáte tuto minimální verzi operačního systému za běhu, nastaví se výchozí verze platformy z TFM.

Aby se aplikace správně spustila ve starší verzi operačního systému, nemůže volat rozhraní API, která v této verzi operačního systému neexistují. Můžete ale přidat stráže kolem volání novějších rozhraní API, aby se volala pouze při spuštění na verzi operačního systému, která je podporuje. Tento model umožňuje navrhnout aplikaci nebo knihovnu tak, aby podporovaly spouštění ve starších verzích operačního systému a současně využívaly novější funkce operačního systému při spouštění na novějších verzích operačního systému.

Hodnota SupportedOSPlatformVersion (bez ohledu na to, jestli je explicitní nebo výchozí) používána analyzátorem kompatibility platformy, která detekuje a varuje před nechráněnými voláními novějších rozhraní API. Spálil se do kompilovaného sestavení projektu jako UnsupportedOSPlatformAttribute atribut sestavení, aby analyzátor kompatibility platformy mohl detekovat nechráněná volání rozhraní API sestavení z projektů s nižší SupportedOSPlatformVersion hodnotou. Na některých platformách tato SupportedOSPlatformVersion hodnota ovlivňuje procesy vytváření a balení aplikací pro konkrétní platformu, které jsou popsané v dokumentaci pro tyto platformy.

Zde je příklad výňatek souboru projektu, který používá TargetFramework vlastnosti a SupportedOSPlatformVersion MSBuild k určení, že aplikace nebo knihovna má přístup k rozhraním API pro iOS 15.0, ale podporuje spouštění v iOS 13.0 a vyšší:

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

  <PropertyGroup>
    <TargetFramework>net6.0-ios15.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
  </PropertyGroup>
  ...

</Project>

Určení cílové architektury

Cílové architektury jsou zadané v souboru projektu. Pokud je zadána jedna cílová architektura, použijte TargetFramework element. Následující soubor projektu aplikace konzoly ukazuje, jak cílit na .NET 9:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net9.0</TargetFramework>
  </PropertyGroup>

</Project>

Když zadáte více cílových architektur, můžete podmíněně odkazovat na sestavení pro každou cílovou architekturu. V kódu můžete podmíněně zkompilovat proti těmto sestavením pomocí symbolů preprocesoru s logikou if-then-else .

Následující projekt knihovny cílí na rozhraní API rozhraní .NET Standard (netstandard1.4) a .NET Framework (net40 a net45). Použijte množný element TargetFrameworks s více cílovými architekturami. Mezi Condition atributy patří balíčky specifické pro implementaci, pokud je knihovna zkompilována pro dva TFM rozhraní .NET Framework:

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

  <PropertyGroup>
    <TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
  </PropertyGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.0 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
    <Reference Include="System.Net" />
  </ItemGroup>

  <!-- Conditionally obtain references for the .NET Framework 4.5 target -->
  <ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Threading.Tasks" />
  </ItemGroup>

</Project>

V knihovně nebo aplikaci napíšete podmíněný kód pomocí direktiv preprocesoru ke kompilaci pro každou cílovou architekturu:

public class MyClass
{
    static void Main()
    {
#if NET40
        Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45
        Console.WriteLine("Target framework: .NET Framework 4.5");
#else
        Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
    }
}

Symboly preprocesoru

Systém sestavení si je vědom symbolů preprocesoru představujících cílové architektury zobrazené v tabulce podporovaných verzí cílové architektury při použití projektů ve stylu sady SDK. Pokud chcete převést .NET Standard, .NET Core nebo .NET 5+ TFM na symbol preprocesoru, nahraďte tečky a spojovníky podtržítkem a změňte malá písmena na velká písmena (například symbol pro netstandard1.4 znak je NETSTANDARD1_4).

Generování těchto symbolů můžete zakázat prostřednictvím DisableImplicitFrameworkDefines vlastnosti. Další informace o této vlastnosti naleznete v tématu DisableImplicitFrameworkDefines.

Úplný seznam symbolů preprocesoru pro cílové architektury .NET je:

Cílové architektury Symboly Další symboly
(k dispozici v sadách .NET 5+ SDK)
Symboly platformy (k dispozici pouze
při zadání TFM specifického pro operační systém)
.NET Framework NETFRAMEWORK, NET481, , , NET471NET47NET45NET40NET472NET461NET35NET462NET46NET452NET451NET48NET20 NET48_OR_GREATER, NET472_OR_GREATER, , NET471_OR_GREATER, NET462_OR_GREATERNET47_OR_GREATER, NET461_OR_GREATERNET40_OR_GREATERNET452_OR_GREATERNET46_OR_GREATERNET451_OR_GREATERNET45_OR_GREATER, NET35_OR_GREATERNET20_OR_GREATER
.NET Standard NETSTANDARD, NETSTANDARD2_1, , NETSTANDARD2_0, NETSTANDARD1_5NETSTANDARD1_6, NETSTANDARD1_4NETSTANDARD1_3NETSTANDARD1_2, , NETSTANDARD1_1NETSTANDARD1_0 NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATER, , NETSTANDARD1_5_OR_GREATERNETSTANDARD1_3_OR_GREATERNETSTANDARD1_2_OR_GREATERNETSTANDARD1_6_OR_GREATERNETSTANDARD1_4_OR_GREATER, , NETSTANDARD1_1_OR_GREATERNETSTANDARD1_0_OR_GREATER
.NET 5+ (a .NET Core) NET, NET9_0, , NET8_0, NET6_0NET5_0, NETCOREAPP2_0NETCOREAPP1_1NET7_0NETCOREAPPNETCOREAPP3_1NETCOREAPP3_0NETCOREAPP2_2NETCOREAPP2_1NETCOREAPP1_0 NET8_0_OR_GREATER, NET7_0_OR_GREATER, , NET6_0_OR_GREATER, NETCOREAPP3_1_OR_GREATERNETCOREAPP2_0_OR_GREATERNET5_0_OR_GREATERNETCOREAPP3_0_OR_GREATERNETCOREAPP2_2_OR_GREATERNETCOREAPP2_1_OR_GREATER, NETCOREAPP1_1_OR_GREATERNETCOREAPP1_0_OR_GREATER ANDROID, BROWSER, IOS, , MACOSMACCATALYST, TVOS, , WINDOWS
[OS][version] (například IOS15_1),
[OS][version]_OR_GREATER (například IOS15_1_OR_GREATER)

Poznámka:

  • Symboly bez verzí se definují bez ohledu na verzi, na kterou cílíte.
  • Symboly specifické pro verzi jsou definované jenom pro verzi, na kterou cílíte.
  • Symboly <framework>_OR_GREATER jsou definované pro verzi, na kterou cílíte, a všechny předchozí verze. Pokud například cílíte na rozhraní .NET Framework 2.0, jsou definovány následující symboly: NET20, NET20_OR_GREATER, NET11_OR_GREATERa NET10_OR_GREATER.
  • Symboly NETSTANDARD<x>_<y>_OR_GREATER jsou definovány pouze pro cíle .NET Standard, a ne pro cíle, které implementují .NET Standard, jako jsou .NET Core a .NET Framework.
  • Liší se od monikers cílové architektury (TFMs) používané vlastností MSBuild TargetFramework a NuGet.

Zastaralé cílové architektury

Následující cílové architektury jsou zastaralé. Balíčky, které cílí na tyto cílové architektury, by se měly migrovat na uvedené nahrazení.

Zastaralé TFM Náhrada
aspnet50
aspnetcore50
dnxcore50
Dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
vyhrát netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45

Viz také