Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Když cílíte na architekturu v aplikaci nebo knihovně, zadáváte sadu rozhraní API, která chcete zpřístupnit aplikaci nebo knihovně. Cílový rámec v souboru projektu zadáte pomocí identifikátoru cílového rámce (TFM).
Aplikace nebo knihovna může cílit na verzi .NET Standard. .NET standardní verze 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í napříč rozhraními .NET Core a .NET Framework pomocí stejného základu kódu.
Aplikace nebo knihovna může také cílit na konkrétní .NET implementaci, aby získala přístup k rozhraním API pro konkrétní implementaci. Například aplikace, která cílí na Univerzální platforma Windows (UPW, uap10.0), má přístup k rozhraním API, která se kompilují pro zařízení, na kterých běží Windows 10.
V některých cílových architekturách, jako je .NET Framework, jsou rozhraní API definována sestaveními, která rozhraní nainstaluje do systému a mohou zahrnovat rozhraní API architektury (například ASP.NET).
Pro cílové architektury založené na balíčcích (například .NET 5 nebo novější, .NET Core a .NET Standard) jsou rozhraní API definovaná balíčky NuGet zahrnutými v aplikaci nebo knihovně.
Nejnovější verze
Následující tabulka definuje nejběžnější cílové frameworky, způsob jejich reference a verzi .NET Standard, kterou implementují. Tyto cílové verze architektury jsou nejnovější stabilní verze. Předběžné verze se nezobrazují. identifikátor cílového frameworku (TFM) je standardizovaný formát tokenu pro určení cílového frameworku aplikace nebo knihovny .NET.
| Cílový rámec | Nejnovější stabilní verze |
Moniker cílové architektury (TFM) | Implementovaný verze .NET Standard |
|---|---|---|---|
| .NET 10 | 10 | net10.0 | 2.1 |
| .NET 9 | 9 | net9.0 | 2.1 |
| .NET 8 | 8 | net8.0 | 2.1 |
| .NET Standard | 2.1 | netstandard2.1 | není k dispozici |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| .NET Framework | 4.8.1 | net481 | 2.0 |
Podporované cílové frameworky
Na cílový rámec 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 k netcore451.
| Cílový rámec | 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* net9.0* net10.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 [Windows 8.1] |
| .NET nanoFramework | netnano1.0 |
| .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ších 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.
TFM specifické pro operační systém
net8.0, net9.0 a net10.0 TFMs zahrnují technologie, které fungují na různých platformách. Zadání TFM specifického pro OS zpřístupní aplikaci rozhraní API specifická pro daný operační systém, například vazby model Windows Forms nebo iOS. Operačně systémově specifické TFM také dědí každé rozhraní API dostupné pro jejich základní TFM, například TFM net10.0.
Následující tabulka ukazuje kompatibilitu .NET 8 nebo více TFM.
| TFM | Kompatibilní s |
|---|---|
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) |
net10.0 |
(Následná verze net9.0) |
net10.0-android |
(Následná verze net9.0-android) |
net10.0-browser |
(Následná verze net9.0-browser) |
net10.0-ios |
(Následná verze net9.0-ios) |
net10.0-maccatalyst |
(Následná verze net9.0-maccatalyst) |
net10.0-macos |
(Následná verze net9.0-macos) |
net10.0-tizen |
(Následná verze net9.0-tizen) |
net10.0-tvos |
(Následná verze net9.0-tvos) |
net10.0-windows |
(Následná verze net9.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 například na základní TFM,
net10.0. 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. Projekty WinForms a WPF (Windows Presentation Foundation) by například měly cílit na
net10.0-windows. - Modely aplikací pro různé platformy (například ASP.NET Core) by měly alespoň cílit na základní TFM, například
net10.0, ale mohou také cílit na další varianty specifické pro platformu, aby bylo možné otevřít 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 net8.0-ios17.2. 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í, proti kterým se váš projekt kompiluje, a k výběru komponent z balíčků NuGet. Tuto verzi si můžete představit jako "verzi platformy" nebo "verzi rozhraní API operačního systému", abyste ji odlišili od verze runtime operačního systému.
Sada .NET SDK je navržená tak, aby podporovala nově vydaná rozhraní API pro jednotlivé platformy bez nové verze základní sady TFM. Díky tomu máte přístup k funkcím pro konkrétní platformu, aniž byste čekali 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 v aktualizaci sady SDK .NET 8.0.x přidala rozhraní API úrovně 34, můžete k nim přistupovat pomocí TFM net8.0-android34.0.
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. Výchozí verze platformy pro Android v .NET 9 je například 35.0, což znamená, že net9.0-android je zkratka pro kanonický net9.0-android35.0 TFM. 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 do jiných nástrojů, jako je NuGet.
Následující tabulka ukazuje default verze cílové platformy (TPV) pro Android a iOS pro každou verzi .NET. Pokud chcete použít nejnovější vazby, použijte výchozí (tedy nezadávejte verzi operačního systému).
| verze .NET | Android | iOS |
|---|---|---|
| .NET 8 | 34.0 | 17.2 |
| .NET 9 | 35,0 | 18,0 |
| .NET 10 | 36.0 | 18.7 |
Počínaje .NET 9, když vydání služby zavede podporu pro novější TPV (který bude mít vždy stejnou major verzi jako při počátečním vydání verze .NET), zůstane nejstarší podporovaný TPV pro tuto verzi .NET nadále podporován. Například u .NET 9 zůstane podporována nejstarší podporovaná verze iOSu 18.0, i když verze služby přidává podporu pro nejnovější verzi iOS 18.x.
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ší podporovaná verze v aktuálně nainstalované úloze. To znamená, že aktualizace úlohy pro iOS v .NET 8 může vést k vyšší výchozí hodnotě TPV, pokud byla do této úlohy přidána podpora pro novou verzi iOS. V předchozí tabulce je výchozím protokolem TPV verze v počáteční verzi pro uvedenou verzi .NET.
Počínaje .NET 9 se toto zvláštní chování vztahuje pouze na projekty executable. Výchozí hodnota TPV pro projekty knihoven teď zůstává stejná pro celé hlavní vydání .NET, stejně jako všechny ostatní platformy.
Přednost
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í na net9.0-ios a balíček nabízí prostředky pro net9.0 a net8.0-ios, použijí se prostředky net9.0. Další informace najdete v tématu Precedenty.
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 runtime, 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 ochrany 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. Je součástí kompilovaného sestavení jako atribut assembly UnsupportedOSPlatformAttribute, aby nástroj pro analýzu kompatibility platformy mohl detekovat nezajištěná volání API tohoto sestavení u projektů s nižší hodnotou SupportedOSPlatformVersion. 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.
Následující příklad je 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 iOSu 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ého rámce
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 konzolové aplikace ukazuje, jak zaměřit na .NET 10:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.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 .NET Standard (netstandard1.4) a .NET Framework (net40 a net45). Použijte množný element TargetFrameworks s více cílovými frameworky. Atributy Condition zahrnují balíčky specifické pro implementaci při kompilaci knihovny pro tyto dva tfmy .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
}
}
Hodnoty TargetFramework jsou aliasy
Hodnota vlastnosti TargetFramework (například net10.0) je popisný název (alias), kterou sada .NET SDK překládá na kanonické vlastnosti monikru. Sada SDK konkrétně nastaví následující vlastnosti z TargetFramework hodnoty:
-
TargetFrameworkMoniker(například.NETCoreApp,Version=v10.0) -
TargetFrameworkIdentifier(například.NETCoreApp) -
TargetFrameworkVersion(napříkladv10.0) -
TargetPlatformMoniker,TargetPlatformIdentifieraTargetPlatformVersion(při cílení na konkrétní platformu)
NuGet a .NET SDK používají tyto vlastnosti monikeru, nikoli řetězec TargetFramework – pro kontroly kompatibility balíčků a logiku sestavení. K tomuto překladu už dochází u TFM specifických pro operační systém. Například net10.0-windows se překládá na TargetFrameworkMoniker = .NETCoreApp,Version=v10.0 a TargetPlatformMoniker = Windows,Version=7.0.
Protože alias je jen název, TargetFramework hodnota může být libovolným alfanumerickým řetězcem, pokud jsou správně nastaveny odpovídající vlastnosti monikeru. Následující soubor projektu používá vlastní alias s názvem banana a explicitně nastaví vlastnosti monikeru tak, aby se projekt sestavil a obnovil pro .NET 10.0:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>banana</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'banana' ">
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
</PropertyGroup>
</Project>
Další informace o těchto vlastnostech naleznete v referenci vlastností MSBuild pro TargetFramework.
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 pomlčky podtržítkem a změňte malá písmena na velká písmena (například symbol pro netstandard2.0 je NETSTANDARD2_0).
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é frameworky | Symboly | Další symboly (k dispozici v .NET 5 a novějších balíčcích SDK) |
Symboly platformy (k dispozici pouze při zadání TFM specifického pro operační systém) |
|---|---|---|---|
| .NET Framework |
NETFRAMEWORK, NET481, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20 |
NET48_OR_GREATER, NET472_OR_GREATER, NET471_OR_GREATER, NET47_OR_GREATER, NET462_OR_GREATER, NET461_OR_GREATER, NET46_OR_GREATER, NET452_OR_GREATER, NET451_OR_GREATER, NET45_OR_GREATER, NET40_OR_GREATER, NET35_OR_GREATER, NET20_OR_GREATER |
|
| .NET Standard |
NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATER, NETSTANDARD1_6_OR_GREATER, NETSTANDARD1_5_OR_GREATER, NETSTANDARD1_4_OR_GREATER, NETSTANDARD1_3_OR_GREATER, NETSTANDARD1_2_OR_GREATER, NETSTANDARD1_1_OR_GREATER, NETSTANDARD1_0_OR_GREATER |
|
| .NET 5+ (a .NET Core) |
NET, NET10_0, NET9_0, NET8_0, NET7_0, NET6_0, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0 |
NET10_0_OR_GREATER, NET9_0_OR_GREATER, NET8_0_OR_GREATER, NET7_0_OR_GREATER, NET6_0_OR_GREATER, NET5_0_OR_GREATER, NETCOREAPP3_1_OR_GREATER, NETCOREAPP3_0_OR_GREATER, NETCOREAPP2_2_OR_GREATER, NETCOREAPP2_1_OR_GREATER, NETCOREAPP2_0_OR_GREATER, NETCOREAPP1_1_OR_GREATER, NETCOREAPP1_0_OR_GREATER |
ANDROID, BROWSER, IOS, , MACCATALYSTMACOS, 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_GREATERjsou 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_GREATERaNET10_OR_GREATER. - Symboly
NETSTANDARD<x>_<y>_OR_GREATERjsou definovány pouze pro .NET standardní cíle, a ne pro cíle, které implementují .NET Standard, například .NET Core a .NET Framework. - Liší se od cílových rámcových monikerů (TFMs) používaných vlastností MSBuild
TargetFrameworka NuGet.
Zastaralé cílové rámce
Následující cílové rámce 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 |
| Windows 8 | netcore45 |
| Windows 8.1 | netcore451 |
| Windows 10 | uap10.0 |
| winrt | netcore45 |