Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli wybierasz framework w aplikacji lub bibliotece, określasz zestaw interfejsów API, które mają być dostępne dla tej aplikacji lub biblioteki. Określasz platformę docelową w pliku projektu za pomocą identyfikatora platformy docelowej (TFM).
Aplikacja lub biblioteka może celować w wersję platformy .NET Standard. Wersje platformy .NET Standard reprezentują standardowe zestawy interfejsów API we wszystkich implementacjach platformy .NET. Na przykład biblioteka może być opracowana dla .NET Standard 1.6 i uzyskiwać dostęp do interfejsów API, które działają zarówno na platformie .NET Core, jak i .NET Framework, używając tej samej bazy kodu.
Aplikacja lub biblioteka może również celować w określoną implementację platformy .NET, aby uzyskać dostęp do specyficznych dla danej implementacji interfejsów API. Na przykład aplikacja przeznaczona dla platformy uniwersalnej systemu Windows (UWP, uap10.0) ma dostęp do interfejsów API skompilowanych dla urządzeń z systemem Windows 10.
W przypadku niektórych platform docelowych, takich jak .NET Framework, interfejsy API są definiowane przez zestawy instalowane przez platformę w systemie i mogą obejmować interfejsy API platformy aplikacji (na przykład ASP.NET).
W przypadku platform docelowych opartych na pakietach (na przykład .NET 5+, .NET Core i .NET Standard) interfejsy API są definiowane przez pakiety NuGet zawarte w aplikacji lub bibliotece.
Najnowsze wersje
W poniższej tabeli zdefiniowano najbardziej typowe platformy docelowe, sposób ich nazywania lub odwoływania się do nich oraz wersję .NET Standard, którą implementują. Te wersje platformy docelowej są najnowszymi stabilnymi wersjami. Wersje przedpremierowe nie są wyświetlane. Moniker platformy docelowej (TFM) to standardowy format tokenu służący do określania platformy docelowej aplikacji lub biblioteki .NET.
| Platforma docelowa | Najnowsze stabilna wersja |
Nazwa platformy docelowej (TFM) | Zaimplementowana Wersja platformy .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 | Nie dotyczy |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| .NET Framework | 4.8.1 | net481 | 2.0 |
Obsługiwane platformy docelowe
Docelowe środowisko jest zwykle określane jako TFM. W poniższej tabeli przedstawiono platformy docelowe obsługiwane przez zestaw .NET SDK i klienta NuGet. Odpowiedniki są wyświetlane w nawiasach. Na przykład win81 jest odpowiednikiem TFM dla netcore451.
| Struktura docelowa | moniker platformy docelowej |
|---|---|
| .NET 5+ (i .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 |
| Sklep Windows | netcore [netcore45] netcore45 [win] [win8] netcore451 [win81] |
| nanoFramework .NET | netnano1.0 |
| .NET Micro Framework | netmf |
| Silverlight | sl4 sl5 |
| Windows Phone | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
| platforma uniwersalna systemu Windows | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5 i nowsze TFM zawierają pewne odmiany specyficzne dla systemu operacyjnego. Aby uzyskać więcej informacji, zobacz następującą sekcję, Specyficzne dla systemów operacyjnych TFMs.
Specyficzne dla systemu operacyjnego TFM
Systemy net8.0, net9.0i i net10.0 TFM obejmują technologie, które działają na różnych platformach. Określenie specyficznego dla systemu operacyjnego TFM sprawia, że interfejsy API specyficzne dla systemu operacyjnego są dostępne dla aplikacji, na przykład Windows Forms lub wiązania iOS. TFMy specyficzne dla systemu operacyjnego dziedziczą również każdy interfejs API dostępny dla ich podstawowego TFM, na przykład net10.0 TFM.
W poniższej tabeli przedstawiono zgodność programu .NET 8+ TFMs.
| moniker platformy docelowej | Kompatybilny z |
|---|---|
net8.0 |
(Kolejna wersja programu net7.0) |
net8.0-android |
(Kolejna wersja programu net7.0-android) |
net8.0-browser |
Wszystko dziedziczone z net8.0 |
net8.0-ios |
(Kolejna wersja programu net7.0-ios) |
net8.0-maccatalyst |
(Kolejna wersja programu net7.0-maccatalyst) |
net8.0-macos |
(Kolejna wersja programu net7.0-macos) |
net8.0-tizen |
(Kolejna wersja programu net7.0-tizen) |
net8.0-tvos |
(Kolejna wersja programu net7.0-tvos) |
net8.0-windows |
(Kolejna wersja programu net7.0-windows) |
net9.0 |
(Kolejna wersja programu net8.0) |
net9.0-android |
(Kolejna wersja programu net8.0-android) |
net9.0-browser |
(Kolejna wersja programu net8.0-browser) |
net9.0-ios |
(Kolejna wersja programu net8.0-ios) |
net9.0-maccatalyst |
(Kolejna wersja programu net8.0-maccatalyst) |
net9.0-macos |
(Kolejna wersja programu net8.0-macos) |
net9.0-tizen |
(Kolejna wersja programu net8.0-tizen) |
net9.0-tvos |
(Kolejna wersja programu net8.0-tvos) |
net9.0-windows |
(Kolejna wersja programu net8.0-windows) |
net10.0 |
(Kolejna wersja programu net9.0) |
net10.0-android |
(Kolejna wersja programu net9.0-android) |
net10.0-browser |
(Kolejna wersja programu net9.0-browser) |
net10.0-ios |
(Kolejna wersja programu net9.0-ios) |
net10.0-maccatalyst |
(Kolejna wersja programu net9.0-maccatalyst) |
net10.0-macos |
(Kolejna wersja programu net9.0-macos) |
net10.0-tizen |
(Kolejna wersja programu net9.0-tizen) |
net10.0-tvos |
(Kolejna wersja programu net9.0-tvos) |
net10.0-windows |
(Kolejna wersja programu net9.0-windows) |
Aby Twoja aplikacja była przenośna na różnych platformach, ale jednocześnie miała dostęp do specyficznych dla systemu operacyjnego interfejsów API, możesz celować w wiele platform-specyficznych TFM i dodać zabezpieczenia wokół wywołań tych interfejsów, używając dyrektyw preprocesora #if. Aby uzyskać listę dostępnych symboli, zobacz Symbole preprocesora.
Sugerowane cele
Skorzystaj z poniższych wskazówek, aby określić, który program TFM ma być używany w aplikacji:
- Aplikacje przenośne na wiele platform powinny być skierowane na podstawowy TFM, na przykład
net10.0. Obejmuje to większość bibliotek, ale także ASP.NET Core i Entity Framework. - Biblioteki specyficzne dla platformy powinny być przeznaczone dla odmian specyficznych dla platformy. Na przykład projekty WinForms i WPF powinny być skierowane na
net10.0-windows. - Modele aplikacji dla wielu platform (na przykład ASP.NET Core) powinny przynajmniej celować w podstawowe TFM, na przykład
net10.0, ale mogą także być przeznaczone dla dodatkowych odmian specyficznych dla platform, aby umożliwić korzystanie z większej liczby interfejsów API lub funkcji.
Wersja systemu operacyjnego w programie TFMs
Możesz również określić opcjonalną wersję systemu operacyjnego na końcu programu TFM specyficznego dla systemu operacyjnego, na przykład net8.0-ios17.2. Wersja wskazuje, które interfejsy API są dostępne dla aplikacji lub biblioteki. Nie kontroluje wersji systemu operacyjnego obsługiwanej przez aplikację lub bibliotekę w czasie wykonywania. Służy do wybierania zestawów referencyjnych kompilowanych przez projekt i wybierania zasobów z pakietów NuGet. Należy traktować tę wersję jako "wersję platformy" lub "wersję interfejsu API systemu operacyjnego", aby odróżnić ją od wersji systemu operacyjnego uruchomieniowego.
Zestaw SDK platformy .NET został zaprojektowany tak, aby umożliwić obsługę nowo wydanych interfejsów API dla poszczególnych platform bez nowej wersji podstawowego serwera TFM. Dzięki temu można uzyskać dostęp do funkcji specyficznych dla platformy bez oczekiwania na główną wersję platformy .NET. Dostęp do tych nowo wydanych interfejsów API można uzyskać, zwiększając wersję platformy w programie TFM. Jeśli na przykład platforma Android dodała interfejsy API poziomu 34 w aktualizacji zestawu SDK .NET 8.0.x, możesz uzyskać do nich dostęp przy użyciu TFM net8.0-android34.0.
Jeśli TFM specyficzny dla systemu operacyjnego nie określa jawnie wersji platformy, ma domyślną wartość, którą można wywnioskować z podstawowego TFM i nazwy platformy. Na przykład domyślna wersja platformy dla systemu Android na platformie .NET 9 to 35.0, co oznacza, że net9.0-android jest to skrót kanoniczny net9.0-android35.0 TFM. Forma skrócona jest przeznaczona tylko do użycia w plikach projektu i jest przekształcana do formy kanonicznej przez cele MSBuild zestawu SDK .NET przed przekazaniem do innych narzędzi, takich jak NuGet.
W poniższej tabeli przedstawiono domyślną wersję platformy docelowej (TPV) dla systemów Android i iOS dla każdej wersji platformy .NET. Jeśli chcesz użyć najnowszych powiązań, użyj wartości domyślnej (czyli nie określ wersji systemu operacyjnego).
| Wersja platformy .NET | Android | iOS |
|---|---|---|
| .NET 8 | 34,0 | 17,2 |
| .NET 9 | 35,0 | 18,0 |
| .NET 10 | 36.0 | 18.7 |
Począwszy od platformy .NET 9, gdy wersje usługi wprowadzają obsługę późniejszego protokołu TPV (który zawsze będzie miał taki sam numer wersji głównej , jak w przypadku początkowego wydania wersji platformy .NET), najwcześniej obsługiwany protokół TPV dla tej wersji platformy .NET pozostanie obsługiwany. Na przykład w przypadku platformy .NET 9 najwcześniej obsługiwana wersja systemu iOS 18.0 pozostanie obsługiwana, nawet jeśli wersja usługi doda obsługę najnowszej wersji systemu iOS 18.x. Jeśli musisz użyć najwcześniejszych powiązań dla wydania platformy .NET, użyj określonego numeru wersji systemu operacyjnego w programie TFM.
Uwaga
Na platformach Firmy Apple (iOS, macOS, tvOS i Mac Catalyst) na platformie .NET 8 i starszych wersjach domyślny TPV jest najnowszą obsługiwaną wersją w aktualnie zainstalowanym obciążeniu. Oznacza to, że aktualizacja obciążenia systemu iOS na platformie .NET 8 może na przykład spowodować powstanie wyższego domyślnego protokołu TPV, jeśli w tym obciążeniu dodano obsługę nowej wersji systemu iOS. W poprzedniej tabeli domyślną wersją TPV jest wersja początkowa dla podanej wersji .NET.
Począwszy od platformy .NET 9, to specjalne zachowanie dotyczy tylko projektów wykonywalnych . Domyślny protokół TPV dla projektów bibliotek pozostaje teraz taki sam dla całej głównej wersji platformy .NET, podobnie jak wszystkie inne platformy.
Pierwszeństwo
Jeśli aplikacja odwołuje się do pakietu z wieloma zasobami dla różnych TFM, preferowane są zasoby bliższe numerowi wersji. Na przykład, jeśli Twoja aplikacja jest skierowana na net9.0-ios, a pakiet oferuje zasoby dla net9.0 i net8.0-ios, zasoby net9.0 są używane. Aby uzyskać więcej informacji, zobacz Pierwszeństwo.
Obsługa starszych wersji systemu operacyjnego
Mimo że aplikacja lub biblioteka specyficzna dla platformy jest kompilowana względem interfejsów API z określonej wersji tego systemu operacyjnego, można ją zapewnić zgodność z wcześniejszymi wersjami systemu operacyjnego, dodając SupportedOSPlatformVersion właściwość do pliku projektu. Właściwość SupportedOSPlatformVersion wskazuje minimalną wersję systemu operacyjnego wymaganą do uruchomienia aplikacji lub biblioteki. Jeśli nie określisz jawnie tej minimalnej wersji systemu operacyjnego środowiska uruchomieniowego w projekcie, zostanie ona domyślnie ustawiona na wersję platformy z programu TFM.
Aby aplikacja mogła działać poprawnie w starszej wersji systemu operacyjnego, nie może wywołać interfejsów API, które nie istnieją w tej wersji systemu operacyjnego. Można jednak dodać osłony wokół wywołań do nowszych interfejsów API, aby były wywoływane tylko w przypadku uruchamiania w wersji systemu operacyjnego, która je obsługuje. Ten wzorzec umożliwia zaprojektowanie aplikacji lub biblioteki do obsługi uruchamiania w starszych wersjach systemu operacyjnego przy jednoczesnym wykorzystaniu nowszych funkcji systemu operacyjnego podczas uruchamiania w nowszych wersjach systemu operacyjnego.
Wartość SupportedOSPlatformVersion (określana jako jawna lub domyślna) jest używana przez analizator zgodności platformy, który wykrywa i ostrzega przed niestrzeżonymi wywołaniami nowszych interfejsów API. Jest zapisany do skompilowanego zestawu projektu jako UnsupportedOSPlatformAttribute atrybut zestawu, dzięki czemu analizator zgodności platformy może wykrywać niestrzeżone wywołania interfejsów API tego zestawu z projektów o niższej SupportedOSPlatformVersion wartości. Na niektórych platformach wartość SupportedOSPlatformVersion wpływa na procesy pakowania aplikacji i budowania specyficzne dla danej platformy, które są omówione w dokumentacji tych platform.
Poniższy przykład to fragment pliku projektu, który używa właściwości TargetFramework i SupportedOSPlatformVersion MSBuild do określenia, że aplikacja lub biblioteka ma dostęp do interfejsów API systemu iOS 15.0, ale obsługuje działanie w systemie iOS 13.0 i nowszych.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-ios15.0</TargetFramework>
<SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
</PropertyGroup>
...
</Project>
Jak określić strukturę docelową
Struktury docelowe są określane w pliku projektu. Po określeniu pojedynczej platformy docelowej użyj elementu TargetFramework. Poniższy plik projektu aplikacji konsolowej pokazuje, jak ustawić platformę docelową na .NET 10.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
Po określeniu wielu platform docelowych można warunkowo odwoływać się do zestawów dla każdej platformy docelowej. W swoim kodzie można warunkowo kompilować przeciwko tym zestawom przy użyciu symboli preprocesora z wykorzystaniem konstrukcji if-then-else .
Poniższy projekt biblioteki jest przeznaczony dla interfejsów API platformy .NET Standard (netstandard1.4) i .NET Framework (net40 i net45). Użyj elementu TargetFrameworks w formie liczby mnogiej z wieloma platformami docelowymi. Atrybuty Condition obejmują pakiety specyficzne dla implementacji, gdy biblioteka jest kompilowana dla dwóch programów TFM programu .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>
W bibliotece lub aplikacji piszesz kod warunkowy przy użyciu dyrektyw preprocesora w celu skompilowania dla każdej platformy docelowej:
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
}
}
Symbole preprocesora
System kompilacji zna symbole preprocesora reprezentujące platformy docelowe wyświetlane w tabeli Obsługiwane wersje platform docelowych podczas korzystania z projektów w stylu zestawu SDK. Aby przekonwertować .NET Standard, .NET Core lub .NET 5+ TFM na symbol preprocesora, zastąp kropki i łączniki znakami podkreślenia oraz zmień małe litery na wielkie (na przykład, symbol dla netstandard2.0 to NETSTANDARD2_0).
Generowanie tych symboli można wyłączyć za pomocą DisableImplicitFrameworkDefines właściwości . Aby uzyskać więcej informacji na temat tej właściwości, zobacz DisableImplicitFrameworkDefines.
Pełna lista symboli preprocesora dla platform docelowych .NET to:
| Platformy docelowe | Symbole | Dodatkowe symbole (dostępne w .NET 5+ SDK-ach) |
Symbole platformy (dostępne tylko podczas określania formatu TFM specyficznego dla systemu operacyjnego) |
|---|---|---|---|
| .NET Framework |
NETFRAMEWORK, NET481, , , NET48NET472NET471NET47NET462NET461NET46NET452NET451NET45NET40NET35NET20 |
NET48_OR_GREATER, NET472_OR_GREATER, , , NET471_OR_GREATERNET47_OR_GREATERNET462_OR_GREATERNET461_OR_GREATERNET46_OR_GREATERNET452_OR_GREATERNET451_OR_GREATERNET45_OR_GREATERNET40_OR_GREATERNET35_OR_GREATERNET20_OR_GREATER |
|
| .NET Standard |
NETSTANDARD, NETSTANDARD2_1, , , NETSTANDARD2_0NETSTANDARD1_6NETSTANDARD1_5NETSTANDARD1_4NETSTANDARD1_3NETSTANDARD1_2NETSTANDARD1_1NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATER, , NETSTANDARD1_6_OR_GREATER, NETSTANDARD1_5_OR_GREATERNETSTANDARD1_4_OR_GREATER, NETSTANDARD1_3_OR_GREATER, , NETSTANDARD1_2_OR_GREATERNETSTANDARD1_1_OR_GREATERNETSTANDARD1_0_OR_GREATER |
|
| .NET 5+ (i .NET Core) |
NET, NET10_0, , , NET9_0NET8_0NET7_0NET6_0NET5_0NETCOREAPPNETCOREAPP3_1NETCOREAPP3_0NETCOREAPP2_2NETCOREAPP2_1NETCOREAPP2_0NETCOREAPP1_1NETCOREAPP1_0 |
NET10_0_OR_GREATER, NET9_0_OR_GREATER, , , NET8_0_OR_GREATERNET7_0_OR_GREATERNET6_0_OR_GREATERNET5_0_OR_GREATERNETCOREAPP3_1_OR_GREATERNETCOREAPP3_0_OR_GREATERNETCOREAPP2_2_OR_GREATERNETCOREAPP2_1_OR_GREATERNETCOREAPP2_0_OR_GREATERNETCOREAPP1_1_OR_GREATERNETCOREAPP1_0_OR_GREATER |
ANDROID, BROWSER, , IOS, MACCATALYSTMACOS, , TVOS, , WINDOWS[OS][version] (na przykład IOS15_1),[OS][version]_OR_GREATER (na przykład IOS15_1_OR_GREATER) |
Uwaga
- Symbole bez wersji są definiowane niezależnie od wersji, na którą są kierowane.
- Symbole specyficzne dla wersji są definiowane tylko dla docelowej wersji.
- Symbole
<framework>_OR_GREATERsą definiowane dla docelowej wersji i wszystkich wcześniejszych wersji. Jeśli na przykład celem jest .NET Framework 2.0, zdefiniowane są następujące symbole:NET20,NET20_OR_GREATER,NET11_OR_GREATERiNET10_OR_GREATER. - Symbole
NETSTANDARD<x>_<y>_OR_GREATERsą definiowane tylko dla obiektów docelowych platformy .NET Standard, a nie dla obiektów docelowych implementujących platformę .NET Standard, takich jak .NET Core i .NET Framework. - Różnią się one od znaczników docelowego środowiska (TFM), używanych przez
TargetFrameworkMSBuild i NuGet.
Przestarzałe struktury docelowe
Następujące frameworki docelowe są przestarzałe. Pakiety przeznaczone dla tych platform docelowych należy przenieść do wskazanych zamienników.
| Przestarzały program TFM | Zastąpienie |
|---|---|
| aspnet50 aspnetcore50 dnxcore50 Dnx dnx45 dnx451 dnx452 |
netcoreapp |
| dotnet dotnet50 dotnet51 dotnet52 dotnet53 dotnet54 dotnet55 dotnet56 |
netstandard |
| netcore50 | uap10.0 |
| wygrać | netcore45 |
| win8 | netcore45 |
| Windows 8.1 | netcore451 |
| Windows 10 | uap10.0 |
| winrt | netcore45 |