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.0
která 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 8 | 8 | net8.0 | 2.1 |
.NET 7 | 7 | net7.0 | 2.1 |
.NET 6 | 6 | net6.0 | 2.1 |
.NET 5 | 5 | net5.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.0
technologie , net6.0
a net7.0
net8.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, net6.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 ) |
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,
net8.0
napří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
net8.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,
net8.0
ale 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 6 | 31.0 | 15.0 | 15.0 | 12.0 | 15.1 | - | 7.0 |
.NET 7 | 33.0 | 16.1 | 16.1 | 13.0 | 16.1 | 7.0 | 7.0 |
.NET 8 | 34.0 | 17.2 | 17.2 | 14.2 | 17.1 | 8.0 | 7.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-ios
prostř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 8:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.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 , NET48 , , NET472 , NET47 NET462 , NET40 NET35 NET471 NET461 NET46 NET452 NET451 NET45 NET20 |
NET48_OR_GREATER , NET472_OR_GREATER , , NET471_OR_GREATER , NET462_OR_GREATER NET47_OR_GREATER , NET461_OR_GREATER NET40_OR_GREATER NET452_OR_GREATER NET46_OR_GREATER NET451_OR_GREATER NET45_OR_GREATER , NET35_OR_GREATER NET20_OR_GREATER |
|
.NET Standard | NETSTANDARD , NETSTANDARD2_1 , , NETSTANDARD2_0 , NETSTANDARD1_5 NETSTANDARD1_6 , NETSTANDARD1_4 NETSTANDARD1_3 NETSTANDARD1_2 , , NETSTANDARD1_1 NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER , NETSTANDARD2_0_OR_GREATER , , NETSTANDARD1_5_OR_GREATER NETSTANDARD1_3_OR_GREATER NETSTANDARD1_2_OR_GREATER NETSTANDARD1_6_OR_GREATER NETSTANDARD1_4_OR_GREATER , , NETSTANDARD1_1_OR_GREATER NETSTANDARD1_0_OR_GREATER |
|
.NET 5+ (a .NET Core) | NET , NET8_0 , , NET7_0 , NET5_0 NET6_0 , NETCOREAPP NETCOREAPP2_0 NETCOREAPP3_0 NETCOREAPP3_1 NETCOREAPP2_2 NETCOREAPP2_1 , NETCOREAPP1_1 NETCOREAPP1_0 |
NET8_0_OR_GREATER , NET7_0_OR_GREATER , , NET6_0_OR_GREATER , NETCOREAPP3_1_OR_GREATER NETCOREAPP2_0_OR_GREATER NET5_0_OR_GREATER NETCOREAPP3_0_OR_GREATER NETCOREAPP2_2_OR_GREATER NETCOREAPP2_1_OR_GREATER , NETCOREAPP1_1_OR_GREATER NETCOREAPP1_0_OR_GREATER |
ANDROID , BROWSER , IOS , , MACOS MACCATALYST , 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_GREATER
aNET10_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 |