Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
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 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 |
Środowisko .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 | TFM |
---|---|
.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* |
.NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
Środowisko .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ę: .NET 5+ specyficzne dla systemu operacyjnego TFMs.
Programy TFM specyficzne dla systemu operacyjnego .NET 5+
Systemy net5.0
, net6.0
, , net7.0
net8.0
i net9.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 net9.0
TFM.
Platforma .NET 5 wprowadziła net5.0-windows
specyficzny dla systemu operacyjnego program TFM, który obejmuje powiązania specyficzne dla systemu Windows dla interfejsów API WinForms, WPF i UWP. .NET 6 i nowsze wersje mają dodatkowe TFMy specyficzne dla systemu operacyjnego, na przykład net6.0-ios
.
W poniższej tabeli przedstawiono zgodność programu .NET 5+ TFMs.
TFM | Kompatybilny z |
---|---|
net5.0 |
net1.. 4 (z ostrzeżeniem NU1701) netcoreapp1.. 3.1 (ostrzeżenie, gdy odwołano się do winForms lub WPF) netstandard1.. 2.1 |
net5.0-windows |
netcoreapp1.. 3.1 (plus wszystkie inne elementy dziedziczone z net5.0 ) |
net6.0 |
(Kolejna wersja programu net5.0 ) |
net6.0-android |
xamarin.android (plus wszystkie inne elementy dziedziczone z net6.0 ) |
net6.0-ios |
Wszystko dziedziczone z net6.0 |
net6.0-maccatalyst |
Wszystko dziedziczone z net6.0 |
net6.0-macos |
Wszystko dziedziczone z net6.0 |
net6.0-tvos |
Wszystko dziedziczone z net6.0 |
net6.0-windows |
(Kolejna wersja programu net5.0-windows ) |
net7.0 |
(Kolejna wersja programu net6.0 ) |
net7.0-android |
(Kolejna wersja programu net6.0-android ) |
net7.0-ios |
(Kolejna wersja programu net6.0-ios ) |
net7.0-maccatalyst |
(Kolejna wersja programu net6.0-maccatalyst ) |
net7.0-macos |
(Kolejna wersja programu net6.0-macos ) |
net7.0-tizen |
tizen40 (plus wszystkie inne elementy dziedziczone z net7.0 ) |
net7.0-tvos |
(Kolejna wersja programu net6.0-tvos ) |
net7.0-windows |
(Kolejna wersja programu net6.0-windows ) |
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 ) |
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
net9.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
net9.0-windows
. - Modele aplikacji dla wielu platform (na przykład ASP.NET Core) powinny przynajmniej celować w podstawowe TFM, na przykład
net9.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 net6.0-ios15.0
. 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. Tę wersję można traktować jako "wersję platformy" lub "wersję interfejsu API systemu operacyjnego", aby odróżnić ją od wersji systemu operacyjnego używanej w czasie wykonywania.
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. Na przykład, jeśli platforma Android dodała interfejsy API poziomu 32 w aktualizacji zestawu SDK platformy .NET 6.0.x, możesz uzyskać do nich dostęp, używając TFM net6.0-android32.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 netp.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 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 | Katalizator mac | macOS | tvOS | Tizen | Windows |
---|---|---|---|---|---|---|---|
.NET 8 | 34,0 | 17,2 | 17,2 | 14,2 | 17.1 | 10,0 | 7.0 |
.NET 9 | 35,0 | 18,0 | 18,0 | 15,0 | 10,0 | 7.0 |
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 net6.0-ios
, a pakiet oferuje zasoby dla net6.0
i net5.0-ios
, zasoby net6.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 w czasie wykonywania 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.
Oto przykładowy fragment pliku projektu, który używa właściwości MSBuild TargetFramework
i SupportedOSPlatformVersion
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 nowszym.
<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 celować w .NET 9.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
</Project>
Podczas określania 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 netstandard1.4
to NETSTANDARD1_4
).
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) |
---|---|---|---|
Środowisko .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+ (i .NET Core) |
NET , 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 |
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 , MACCATALYST MACOS , , 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_GREATER
są 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_GREATER
iNET10_OR_GREATER
. - Symbole
NETSTANDARD<x>_<y>_OR_GREATER
są 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
TargetFramework
MSBuild 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 |