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.0
de 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.0
pé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.0
ami 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.1
haszná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.0
net5.0-ios
kí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 , 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+ (és .NET Core) | NET , NET8_0 , NET7_0 , NET6_0 , NET5_0 NETCOREAPP , NETCOREAPP3_1 , NETCOREAPP3_0 , NETCOREAPP2_2 , NETCOREAPP2_1 , NETCOREAPP2_0 , , , NETCOREAPP1_1 NETCOREAPP1_0 |
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] (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
ésNET10_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 |