Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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. Például egy könyvtár megcélozhatja a .NET Standard 1.6-ot, és hozzáférést kaphat azokra az API-kra, amelyek a .NET Core és a .NET-keretrendszer alatt is ugyanazon kódbázis használatával működnek.
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 egy univerzális Windows Platformot (UWP, uap10.0
) használó alkalmazás hozzáfér 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 meghatározza a leggyakoribb célkeretrendszereket, hogyan hivatkoznak rájuk, és mely .NET Standard verziókat valósítják meg. Ezek a cél-keretrendszerverziók a legújabb stabil verziók. Az előzetes verziók nem jelennek meg. A Target Framework Moniker (TFM) egy szabványosított jogkivonat-formátum egy .NET-alkalmazás vagy -tár célkeretrendszerének megadásához.
Cél-keretrendszer | Legkésőbbi stabil verzió |
Célkeretrendszer megjelölés (TFM) | Megvalósítva .NET Standard verzió |
---|---|---|---|
.NET 9 | 9 | net9.0 | 2.1 |
.NET 8 | 8 | net8.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élkeretrendszerre általában TFM-mel hivatkoznak. 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
egy TFM, amely egyenértékű a netcore451
-vel.
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* net9.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 nanoFramework | netnano1.0 |
.NET Micro Framework | netmf |
Silverlight | sl4 sl5 |
Windows Phone | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
Az univerzális 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
, net8.0
és net9.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 net9.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 (és minden más örökölt net5.0 ) |
net6.0 |
(A net5.0 következő verziója) |
net6.0-android |
xamarin.android (plusz minden más, ami örökölt net6.0 -ből származik) |
net6.0-ios |
Minden, ami net6.0 -től örökölt |
net6.0-maccatalyst |
Minden, ami net6.0 -től örökölt |
net6.0-macos |
Minden, ami net6.0 -től örökölt |
net6.0-tvos |
Minden, ami net6.0 -től örökölt |
net6.0-windows |
(A net5.0-windows következő verziója) |
net7.0 |
(A net6.0 következő verziója) |
net7.0-android |
(A net6.0-android következő verziója) |
net7.0-ios |
(A net6.0-ios következő verziója) |
net7.0-maccatalyst |
(A net6.0-maccatalyst következő verziója) |
net7.0-macos |
(A net6.0-macos következő verziója) |
net7.0-tizen |
tizen40 (plusz minden más, ami örökölt net7.0 -ből származik) |
net7.0-tvos |
(A net6.0-tvos következő verziója) |
net7.0-windows |
(A net6.0-windows következő verziója) |
net8.0 |
(A net7.0 következő verziója) |
net8.0-android |
(A net7.0-android következő verziója) |
net8.0-browser |
Minden, ami net8.0 -től örökölt |
net8.0-ios |
(A net7.0-ios következő verziója) |
net8.0-maccatalyst |
(A net7.0-maccatalyst következő verziója) |
net8.0-macos |
(A net7.0-macos következő verziója) |
net8.0-tizen |
(A net7.0-tizen következő verziója) |
net8.0-tvos |
(A net7.0-tvos következő verziója) |
net8.0-windows |
(A net7.0-windows következő verziója) |
net9.0 |
(A net8.0 következő verziója) |
net9.0-android |
(A net8.0-android következő verziója) |
net9.0-browser |
(A net8.0-browser következő verziója) |
net9.0-ios |
(A net8.0-ios következő verziója) |
net9.0-maccatalyst |
(A net8.0-maccatalyst következő verziója) |
net9.0-macos |
(A net8.0-macos következő verziója) |
net9.0-tizen |
(A net8.0-tizen következő verziója) |
net9.0-tvos |
(A net8.0-tvos következő verziója) |
net9.0-windows |
(A net8.0-windows következő verziója) |
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
net9.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. WinForms és WPF projekteknek például
net9.0-windows
-ra kell célozniuk. - A platformfüggetlen alkalmazásmodelleknek (például a ASP.NET Core-nak) legalább az alap TFM-et kell céloznia, például
net9.0
, de további platformspecifikus ízeket is megcé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 annak az operációs rendszernek a verzióját, amelyet az alkalmazás vagy könyvtár futáskor támogat. A projekt által lefordított referencia-összeállítások kiválasztására, valamint a NuGet-csomagokból származó eszközök 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.
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 Android platform 32-es szintű API-kat adott hozzá egy .NET 6.0.x SDK-frissítéshez, akkor a TFM net6.0-android32.0
használatával érheti el őket.
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 Android alapértelmezett platformverziója a .NET 9-ben például 35.0
, ami azt jelenti, hogy net9.0-android
a kanonikus netp.0-android35.0
TFM rövidített verziója. A rövidített alak csak projektfájlokban használható, és a .NET SDK MSBuild-céljai kibővítik a kanonikus formára, mielőtt azt más eszközöknek, például a NuGetnek átadnák.
Az alábbi táblázat az egyes .NET-kiadások alapértelmezett célplatform-verzióját (TPV) mutatja be. Ha a legújabb kötéseket szeretné használni, használja az alapértelmezettet (vagyis ne adjon meg operációsrendszer-verziót).
.NET-verzió | Android | Ios | Mac Catalyst | 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 |
A .NET 9-től kezdődően, amikor a szolgáltatáskiadások egy későbbi TPV-t támogatnak (amely mindig ugyanazzal a fő verziószámmal fog rendelkezni, mint a .NET-verzió kezdeti megjelenésekor), az adott .NET-verzió legkorábbi támogatott TPV-je továbbra is támogatott marad. A .NET 9 esetében például a legkorábbi támogatott iOS-verzió, a 18.0 továbbra is támogatott marad, még akkor is, ha egy szolgáltatáskiadás támogatja a legújabb iOS 18.x verziót. Ha a legkorábbi kötéseket kell használnia egy .NET-kiadáshoz, használjon egy adott operációsrendszer-verziószámot a TFM-ben.
Megjegyzés
Az Apple platformokon (iOS, macOS, tvOS és Mac Catalyst) a .NET 8 és korábbi verzióiban az alapértelmezett TPV a legújabb támogatott verzió a jelenleg telepített számítási feladatban. Ez azt jelenti, hogy az iOS-számítási feladat .NET 8-ban való frissítése például magasabb alapértelmezett TPV-t eredményezhet, ha az iOS új verziójának támogatása hozzáadva lett az adott számítási feladathoz. Az előző táblázatban az alapértelmezett TPV a megadott .NET-verzió kezdeti kiadásának verziója.
A .NET 9-től kezdődően ez a speciális viselkedés csak végrehajtható projektekre vonatkozik. A kódtárprojektek alapértelmezett TPV-je mostantól egy nagyobb .NET-kiadás teljes egészében ugyanaz marad, mint az összes többi platform.
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. Az alkalmazás célja például a net6.0-ios
, és ha a csomag eszközöket kínál a net6.0
és net5.0-ios
számára, akkor az net6.0
eszközöket használja a rendszer. 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 projektfájlhoz a SupportedOSPlatformVersion
tulajdonság hozzáadásával kompatibilissé teheti azt korábbi operációs rendszer 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 projekt lefordított szerelvényébe mint UnsupportedOSPlatformAttribute szerelvényattribútum van beépítve, így a platform kompatibilitás elemző képes észlelni a nem felügyelt hívásokat az adott szerelvény API-jára 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 TargetFramework
az SupportedOSPlatformVersion
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 9-et:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
</Project>
Ha több célkeretrendszert ad meg, feltételesen hivatkozhat az assembliákra az egyes célkeretrendszerekhez. A kódban feltételesen lefordíthatja ezeket az assembly-ket előfeldolgozó szimbólumokkal és if-then-else logiká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>
Az ön könyvtárában vagy alkalmazásában feltételes kódot ír előfeldolgozó utasítás használatával az egyes célkeretrendszerekhez való fordításhoz.
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 elérhető) operációsrendszer-specifikus TFM megadásakor) |
---|---|---|---|
.NET-keretrendszer |
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+ (és .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] (például IOS15_1 ),[OS][version]_OR_GREATER (például IOS15_1_OR_GREATER ) |
Megjegyzé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-keretrendszert célozza 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élkeretrendszerek
A következő cél-keretrendszerek elavultak. Azoknak a csomagoknak, amelyek ezekre a célkeretrendszerekre irányulnak, az említett helyettesítésekre kell átállniuk.
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 |
Windows 8 | netcore45 |
Windows 8.1 | netcore451 |
Windows 10 | uap10.0 |
winrt | netcore45 |
Lásd még
- Cél-keretrendszernevek a .NET 5-ben
- .NET Standard
- .NET-verziószámozás
- Windows 11 kiadási információi