Cél-keretrendszerek SDK-stílusú projektekben

Amikor egy alkalmazás vagy tár keretrendszerét célozza meg, meg kell adnia azokat az API-kat, amelyeket elérhetővé szeretne tenni az alkalmazás vagy tár számára. A cél keretrendszert a projektfájlban egy cél-keretrendszer-moniker (TFM) használatával adhatja meg.

Egy alkalmazás vagy tár a .NET Standard egy verzióját célozhatja meg. A .NET Standard verziók minden .NET-implementációban szabványosított API-kat képviselnek. A kódtárak például megcélzhatják a .NET Standard 1.6-ot, és hozzáférhetnek a .NET Core-ban működő API-khoz, és ugyanazon kódbázis használatával .NET-keretrendszer.

Az alkalmazások vagy tárak egy adott .NET-implementációt is megcélozhatnak, hogy hozzáférjenek a implementációspecifikus API-khoz. Például a Xamarin.iOS-t megcélzó alkalmazások (például Xamarin.iOS10) hozzáférnek az iOS 10 Xamarin által biztosított iOS API-burkolóihoz, vagy a Univerzális Windows-platform (UWP, uap10.0) célokat szolgáló alkalmazások hozzáférhetnek a Windows 10-et futtató eszközökre lefordított API-khoz.

Egyes cél-keretrendszerek, például a .NET-keretrendszer esetében az API-kat azok a szerelvények határozzák meg, amelyeket a keretrendszer egy rendszerre telepít, és tartalmazhatnak alkalmazás-keretrendszer API-kat (például ASP.NET).

Csomagalapú cél-keretrendszerek (például .NET 5+, .NET Core és .NET Standard) esetén az API-kat az alkalmazás vagy tár nuGet-csomagjai határozzák meg.

Legújabb verziók

Az alábbi táblázat a leggyakoribb cél-keretrendszereket, a hivatkozások módját és a .NET Standard implementálásának módját határozza meg. Ezek a cél-keretrendszerverziók a legújabb stabil verziók. Az előzetes verziók nem jelennek meg. A cél-keretrendszer-moniker (TFM) egy szabványosított jogkivonat-formátum egy .NET-alkalmazás vagy -tár cél keretrendszerének megadásához.

Cél-keretrendszer Legújabb
stabil verzió
Target framework moniker (TFM) Végre
.NET Standard verzió
.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 n/a
.NET Core 3.1 netcoreapp3.1 2.1
.NET-keretrendszer 4.8.1 net481 2,0

Támogatott cél-keretrendszerek

A cél keretrendszerre általában egy TFM hivatkozik. Az alábbi táblázat a .NET SDK és a NuGet-ügyfél által támogatott cél-keretrendszereket mutatja be. A megfelelők szögletes zárójelben jelennek meg. Például win81 egyenértékű TFM a következőhöz netcore451: .

Cél-keretrendszer TFM
.NET 5+ (és .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-keretrendszer net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
net481
Windows Áruház netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Framework netmf
Silverlight sl4
sl5
Windows Phone wp [wp7]
wp7
wp75
wp8
wp81
wpa81
Universal Windows Platform uap [uap10.0]
uap10.0 [win10] [netcore50]

* .NET 5 és újabb TFM tartalmaz néhány operációs rendszer-specifikus változatokat. További információ: . NET 5+ operációsrendszer-specifikus TFM-ek.

.NET 5+ operációsrendszer-specifikus TFM-k

A net5.0, net6.0, net7.0, és net8.0 TFM-ekhez különböző platformokon működő technológiák tartoznak. Az operációsrendszer-specifikus TFM-ek megadásával az alkalmazás számára elérhetővé válnak az adott operációs rendszerre jellemző API-k, például a Windows Forms vagy az iOS-kötések. Az operációsrendszer-specifikus TFM-ek az alap TFM-hez elérhető összes API-t is öröklik, például a net6.0 TFM-et.

A .NET 5 bevezette az net5.0-windows operációsrendszer-specifikus TFM-et, amely Windows-specifikus kötéseket tartalmaz a WinForms, WPF és UWP API-khoz. A .NET 6-os és újabb verziói további operációsrendszer-specifikus TFM-ekkel rendelkeznek, például net6.0-ios.

Az alábbi táblázat a .NET 5+ TFM-k kompatibilitását mutatja be.

TFM Kompatibilis a
net5.0 net1.. 4 (NU1701 figyelmeztetéssel)
netcoreapp1.. 3.1 (figyelmeztetés WinForms vagy WPF hivatkozás esetén)
netstandard1.. 2.1
net5.0-windows netcoreapp1.. 3.1 (plusz minden más örökölt net5.0)
net6.0 (A következő verzió: net5.0)
net6.0-android xamarin.android (plusz minden más öröklött net6.0)
net6.0-ios xamarin.ios (plusz minden más öröklött net6.0)
net6.0-maccatalyst xamarin.ios (plusz minden más öröklött net6.0)
net6.0-macos xamarin.mac (plusz minden más öröklött net6.0)
net6.0-tvos xamarin.tvos (plusz minden más öröklött net6.0)
net6.0-windows (A következő verzió: net5.0-windows)
net7.0 (A következő verzió: net6.0)
net7.0-android (A következő verzió: net6.0-android)
net7.0-ios (A következő verzió: net6.0-ios)
net7.0-maccatalyst (A következő verzió: net6.0-maccatalyst)
net7.0-macos (A következő verzió: net6.0-macos)
net7.0-tizen tizen40 (plusz minden más öröklött net7.0)
net7.0-tvos (A következő verzió: net6.0-tvos)
net7.0-windows (A következő verzió: net6.0-windows)
net8.0 (A következő verzió: net7.0)
net8.0-android (A következő verzió: net7.0-android)
net8.0-browser Minden, amitől öröklött net8.0
net8.0-ios (A következő verzió: net7.0-ios)
net8.0-maccatalyst (A következő verzió: net7.0-maccatalyst)
net8.0-macos (A következő verzió: net7.0-macos)
net8.0-tizen (A következő verzió: net7.0-tizen)
net8.0-tvos (A következő verzió: net7.0-tvos)
net8.0-windows (A következő verzió: net7.0-windows)

Annak érdekében, hogy az alkalmazás hordozható legyen a különböző platformokon, de továbbra is hozzáférhessen az operációsrendszer-specifikus API-khoz, több operációsrendszer-specifikus TFM-et célozhat meg, és platformvédőket vehet fel az operációsrendszer-specifikus API-hívások köré az előfeldolgozási irányelvek használatával #if . Az elérhető szimbólumok listájáért lásd az előfeldolgozó szimbólumokat.

Javasolt célok

Ezekkel az irányelvekkel meghatározhatja, hogy melyik TFM-et használja az alkalmazásban:

  • A több platformra hordozható alkalmazásoknak egy alapszintű TFM-et kell céloznia, például net8.0. Ez magában foglalja a legtöbb kódtárat, de ASP.NET Core és Entity Framework keretrendszert is.

  • A platformspecifikus kódtárak platformspecifikus ízeket céloznak meg. A WinForms és a WPF-projekteknek például célként kell megjelenniük net8.0-windows.

  • A platformfüggetlen alkalmazásmodelleknek (Xamarin Forms, ASP.NET Core) és hídcsomagoknak (Xamarin Essentials) legalább az alap TFM-et kell céloznia, net8.0de további platformspecifikus ízeket is célozhatnak további API-k vagy funkciók felvilágosítása érdekében.

Operációs rendszer verziója TFM-ekben

Megadhat egy választható operációsrendszer-verziót is egy operációsrendszer-specifikus TFM végén, net6.0-ios15.0például. A verzió azt jelzi, hogy mely API-k érhetők el az alkalmazás vagy a tár számára. Nem szabályozza az alkalmazás vagy a tár által futtatáskor támogatott operációsrendszer-verziót. A projekt által lefordított referencia-szerelvények kiválasztására, valamint a NuGet-csomagokból származó objektumok kiválasztására szolgál. Ezt a verziót tekintheti "platformverziónak" vagy "OS API-verziónak", hogy egyértelműsítse azt a futtató operációs rendszer verziójából.

Ha egy operációsrendszer-specifikus TFM nem adja meg explicit módon a platformverziót, egy hallgatólagos értékkel rendelkezik, amely az alapszintű TFM-ből és a platform nevéből következtethető. Az iOS alapértelmezett platformértéke például a .NET 6-ban, 15.0ami azt jelenti, hogy net6.0-ios a canonical net6.0-ios15.0 TFM rövidített értéke. Az újabb alapszintű TFM hallgatólagos platformverziója magasabb lehet, például egy jövőbeli net8.0-ios TFM megfeleltethető net8.0-ios16.0. A rövidített űrlap csak projektfájlokban használható, és a .NET SDK MSBuild-céljai bővítik a canonical formában, mielőtt átadnák őket más eszközöknek, például a NuGetnek.

Az alábbi táblázat az egyes .NET-kiadások alapértelmezett célplatform-értékeit (TPV) mutatja.

.NET-verzió Platform Alapértelmezett TPV
.NET 6 Android 31,0
.NET 7 Android 33.0
.NET 8 Android 34,0
.NET 6 iOS 15,0
.NET 7 iOS 16.1
.NET 8 iOS 17,2
.NET 6 Mac Catalyst 15,0
.NET 7 Mac Catalyst 16.1
.NET 8 Mac Catalyst 17,2
.NET 6 macOS 12.0
.NET 7 macOS 13,0
.NET 8 macOS 14,2
.NET 6 tvOS 15.1
.NET 7 tvOS 16.1
.NET 8 tvOS 17.1
.NET 7 Tizen 7,0
.NET 8 Tizen 8.0
.NET 6 Windows 7,0
.NET 7 Windows 7,0
.NET 8 Windows 7,0

A .NET SDK úgy lett kialakítva, hogy képes legyen támogatni az újonnan kiadott API-kat egy egyéni platformhoz az alap TFM új verziója nélkül. Ez lehetővé teszi a platformspecifikus funkciók elérését anélkül, hogy a .NET jelentős kiadására vár. Ezekhez az újonnan kiadott API-khoz a TFM platformverziójának növelésével férhet hozzá. Ha például az iOS platform iOS 15.1 API-kat adott hozzá egy .NET 6.0.x SDK-frissítéshez, a TFM net6.0-ios15.1használatával érheti el őket.

Prioritás

Ha az alkalmazás olyan csomagra hivatkozik, amely több objektummal rendelkezik a különböző TFM-ekhez, a verziószámban közelebb álló objektumok lesznek előnyben. Ha például az alkalmazás célként szolgál net6.0-ios , és a csomag eszközöket net6.0net5.0-ioskínál az és azokhoz, akkor a rendszer az net6.0 eszközöket használja. További információ: Precedences.

Régebbi operációsrendszer-verziók támogatása

Bár egy platformspecifikus alkalmazás vagy tár az operációs rendszer egy adott verziójából származó API-kra van lefordítva, a tulajdonság projektfájlhoz való hozzáadásával kompatibilissé teheti a SupportedOSPlatformVersion korábbi operációsrendszer-verziókkal. A SupportedOSPlatformVersion tulajdonság az alkalmazás vagy tár futtatásához szükséges minimális operációsrendszer-verziót jelzi. Ha nem adja meg kifejezetten ezt a minimális futásidejű operációsrendszer-verziót a projektben, az alapértelmezés szerint a TFM platformverziója lesz.

Ahhoz, hogy az alkalmazás megfelelően fusson egy régebbi operációsrendszer-verzión, nem tud olyan API-kat meghívni, amelyek nem léteznek az operációs rendszer azon verzióján. Az újabb API-khoz azonban hozzáadhat őröket a hívások körül, így azok csak akkor lesznek meghívva, ha az operációs rendszer azon verzióján futnak, amely támogatja őket. Ez a minta lehetővé teszi, hogy úgy tervezhesse meg az alkalmazást vagy a tárat, hogy támogassa a régebbi operációsrendszer-verziók futtatását, miközben kihasználja az újabb operációsrendszer-funkciók előnyeit az újabb operációsrendszer-verziók futtatásakor.

Az SupportedOSPlatformVersion értéket (akár explicit, akár alapértelmezett) a platformkompatibilitás-elemző használja, amely észleli és figyelmezteti az újabb API-kra irányuló nem őrzött hívásokat. A rendszer a projekt lefordított szerelvényébe szerelvény attribútumként UnsupportedOSPlatformAttribute van beégve, így a platformkompatibilitás-elemző képes észlelni az adott szerelvény API-jára irányuló nem őrzött hívásokat alacsonyabb SupportedOSPlatformVersion értékű projektekből. Egyes platformokon ez az érték hatással van a SupportedOSPlatformVersion platformspecifikus alkalmazáscsomagolási és -buildelési folyamatokra, amelyekről az adott platformok dokumentációja tartalmaz.

Íme egy példarészlet egy projektfájlról, amely az MSBuild és SupportedOSPlatformVersion az TargetFramework MSBuild tulajdonságok használatával határozza meg, hogy az alkalmazás vagy tár hozzáfér-e az iOS 15.0 API-khoz, de támogatja az iOS 13.0-s és újabb verziókon való futtatást:

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

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

</Project>

Cél-keretrendszer megadása

A cél keretrendszerek egy projektfájlban vannak megadva. Ha egyetlen cél keretrendszer van megadva, használja a TargetFramework elemet. A következő konzolalkalmazás projektfájlja bemutatja, hogyan célozhatja meg a .NET 8-at:

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

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

</Project>

Ha több cél keretrendszert ad meg, feltételesen hivatkozhat szerelvényekre az egyes cél-keretrendszerekhez. A kódban feltételesen lefordíthatja ezeket a szerelvényeket előfeldolgozási szimbólumok és if-then-else logika használatával.

Az alábbi kódtárprojekt a .NET Standard (netstandard1.4) és .NET-keretrendszer (net40 és net45) API-jait célozza meg. Használja a többes számú TargetFrameworks elemet több cél-keretrendszerrel. Az Condition attribútumok implementációspecifikus csomagokat tartalmaznak, amikor a kódtár a két .NET-keretrendszer TFM-hez van lefordítva:

<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>

A kódtárban vagy az alkalmazásban feltételes kódot ír előfeldolgozási irányelvek használatával az egyes cél-keretrendszerek fordításához:

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
    }
}

Előfeldolgozó szimbólumok

A buildrendszer tisztában van az SDK-stílusú projektek esetében a támogatott célkeret-verziók táblában látható cél-keretrendszereket jelképező előprocesszorszimbólumokkal. Ha .NET Standard, .NET Core vagy .NET 5+ TFM-et szeretne előfeldolgozási szimbólummá alakítani, cserélje le a pontokat és a kötőjeleket aláhúzásjelre, és módosítsa a kisbetűket nagybetűsre (például a szimbólum netstandard1.4 az).NETSTANDARD1_4

Ezeknek a szimbólumoknak a létrehozását letilthatja a DisableImplicitFrameworkDefines tulajdonságon keresztül. A tulajdonsággal kapcsolatos további információkért lásd: DisableImplicitFrameworkDefines.

A .NET-cél-keretrendszerek előprocesszorszimbólumainak teljes listája a következő:

Cél-keretrendszerek Szimbólumok További szimbólumok
(.NET 5+ SDK-kban érhető el)
Platformszimbólumok (csak
operációsrendszer-specifikus TFM megadásakor)
.NET-keretrendszer NETFRAMEWORK, NET48, NET472, NET471, NET47NET462, NET461, NET46, NET452, NET451, NET45, NET40, , NET35,NET20 NET48_OR_GREATER, NET472_OR_GREATER, NET471_OR_GREATER, NET47_OR_GREATER, NET462_OR_GREATERNET461_OR_GREATER, NET46_OR_GREATER, NET452_OR_GREATER, NET451_OR_GREATER, NET45_OR_GREATER, NET40_OR_GREATER, , , NET35_OR_GREATERNET20_OR_GREATER
.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, , NETSTANDARD1_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_GREATER, , NETSTANDARD1_1_OR_GREATERNETSTANDARD1_0_OR_GREATER
.NET 5+ (és .NET Core) NET, NET8_0, NET7_0, NET6_0, NET5_0NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, , , NETCOREAPP1_1NETCOREAPP1_0 NET8_0_OR_GREATER, NET7_0_OR_GREATER, NET6_0_OR_GREATER, NET5_0_OR_GREATER, NETCOREAPP3_1_OR_GREATERNETCOREAPP3_0_OR_GREATER, NETCOREAPP2_2_OR_GREATER, NETCOREAPP2_1_OR_GREATER, NETCOREAPP2_0_OR_GREATER, , NETCOREAPP1_1_OR_GREATERNETCOREAPP1_0_OR_GREATER ANDROID, BROWSER, IOS, MACCATALYSTMACOS, TVOS, WINDOWS
[OS][version] (például IOS15_1),
[OS][version]_OR_GREATER (például IOS15_1_OR_GREATER)

Feljegyzés

  • A verzió nélküli szimbólumok a megcélzott verziótól függetlenül vannak definiálva.
  • A verzióspecifikus szimbólumok csak a megcélzott verzióhoz vannak definiálva.
  • A <framework>_OR_GREATER szimbólumok a megcélzott verzióhoz és az összes korábbi verzióhoz vannak definiálva. Ha például a 2.0-s .NET-keretrendszer céloz meg, a következő szimbólumok vannak definiálva: NET20, NET20_OR_GREATER, NET11_OR_GREATERés NET10_OR_GREATER.
  • A NETSTANDARD<x>_<y>_OR_GREATER szimbólumok csak a .NET Standard célokhoz vannak definiálva, a .NET Standardot implementáló célokhoz nem, például a .NET Core-hoz és a .NET-keretrendszer.
  • Ezek eltérnek az MSBuild TargetFramework tulajdonság és a NuGet által használt célkeret-monikerektől (TFM-ek).

Elavult cél-keretrendszerek

A következő cél-keretrendszerek elavultak. Az ezeket a cél-keretrendszereket célzó csomagoknak a jelzett cserékre kell migrálniuk.

Elavult TFM Csere
aspnet50
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
Nyer netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45

Lásd még