Megosztás a következőn keresztül:


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. 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.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 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.0haszná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 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, NET47NET462, NET461, NET46, NET452, NET451, NET45, , NET40, , , NET35NET20 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, NET9_0, NET8_0, NET7_0, NET6_0NET5_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_GREATERNETCOREAPP3_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, MACCATALYSTMACOS, 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, é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é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