A modern .NET több operációs rendszert és eszközt is támogat. A nyílt forráskódú .NET-kódtárak számára fontos, hogy a lehető legtöbb fejlesztőt támogassák, legyen szó az Azure-ban üzemeltetett ASP.NET webhelyről, vagy a Unity .NET-játékáról.
.NET- és .NET Standard-célok
A .NET- és a .NET Standard-célok a legjobb módja annak, hogy platformfüggetlen támogatást adjanak a .NET-kódtárakhoz.
A .NET Standard az összes .NET-implementációban elérhető .NET API-k specifikációja. A .NET Standard megcélzásával olyan kódtárakat hozhat létre, amelyek a .NET Standard egy adott verziójában található API-k használatára vannak korlátozva, ami azt jelenti, hogy a .NET Standard ezen verzióját implementáló összes platform használhatja.
A .NET 6-8 a .NET implementációja. Minden verzió egyetlen termék, amely egységes képességekkel és API-kkal rendelkezik, amelyek windowsos asztali alkalmazásokhoz, platformfüggetlen konzolalkalmazásokhoz, felhőszolgáltatásokhoz és webhelyekhez használhatók.
A .NET és a .NET Standard összehasonlításáról további információt a .NET 5 és a .NET Standard című témakörben talál.
Ha a projekt a .NET-et vagy a .NET Standardot célozza meg, és sikeresen fordít, nem garantálja, hogy a kódtár minden platformon sikeresen fut:
A platformspecifikus API-k más platformokon is sikertelenek lesznek. Windows rendszeren például sikeres lesz, Microsoft.Win32.Registry és bármely más operációs rendszeren való használatkor dobni PlatformNotSupportedException fog.
Az API-k eltérően viselkedhetnek. A tükröződési API-k például eltérő teljesítményjellemzőkkel rendelkeznek, ha egy alkalmazás előre összeállított összeállítást használ iOS-en vagy UWP-n.
Tipp.
A .NET csapata platformkompatibilitás-elemzőt kínál a lehetséges problémák felderítéséhez.
✔️ DO kezdjük a cél belefoglalása netstandard2.0 .
A legtöbb általános célú kódtárnak nincs szüksége a .NET Standard 2.0-n kívüli API-kra. A .NET Standard 2.0-t minden modern platform támogatja, és ez az ajánlott módja annak, hogy több platformot is támogatjon egy célértékkel. Ha nem kell támogatnia a .NET-keretrendszer, a .NET Standard 2.1-et is célba vehet.
✔️ HA új API-kat szeretne bevezetni egy modern .NET-ben, a DO tartalmazzon egy net6.0 célt vagy egy újabbat.
A .NET 6-os és újabb verziói használhatják a célokat netstandard2.0 , ezért net6.0 nincs szükség rá. Kifejezetten meg kell céloznianet6.0, net7.0net8.0vagy net9.0 ha újabb .NET API-kat szeretne használni.
❌ KERÜLJE a célokat netstandard1.x .
A .NET Standard 1.x a NuGet-csomagok részletes készleteként van elosztva, amely egy nagy csomagfüggőségi gráfot hoz létre, és sok csomag letöltését eredményezi az összeállítás során. A modern .NET-implementációk támogatják a .NET Standard 2.0-t. Csak akkor érdemes a .NET Standard 1.x-et célozni, ha kifejezetten egy régebbi platformra van szüksége.
✔️ HA célra van szüksége, a DO tartalmaz egy netstandard2.0 célértéket netstandard1.x .
A .NET Standard 2.0-t támogató összes platform használja a netstandard2.0 célt, és kihasználja, hogy kisebb csomagdiagramot használ, míg a régebbi platformok továbbra is működni fognak, és vissza fognak esni a netstandard1.x cél használatára.
❌ NE tartalmazzon .NET Standard-célt, ha a kódtár platformspecifikus alkalmazásmodellre támaszkodik.
Az UWP vezérlőeszköztár például egy olyan alkalmazásmodelltől függ, amely csak az UWP-n érhető el. Az alkalmazásmodell-specifikus API-k nem érhetők el a .NET Standardban.
Többhelyes célzás
Előfordulhat, hogy keretrendszerspecifikus API-kat kell elérnie a kódtárakból. A keretrendszerspecifikus API-k meghívásának legjobb módja a többhelyes célkezelés használata, amely a projektet több .NET-cél keretrendszerhez építi , nem pedig csak egyhez.
Annak érdekében, hogy megvédhesse a fogyasztókat attól, hogy egyéni keretrendszerekhez kelljen építeniük, törekednie kell arra, hogy .NET Standard kimenettel és egy vagy több keretrendszerspecifikus kimenettel rendelkezzen. Többhelyes használata mellett az összes szerelvény egyetlen NuGet-csomagba van csomagolva. A felhasználók ezután hivatkozhatnak ugyanarra a csomagra, és a NuGet kiválasztja a megfelelő megvalósítást. A .NET Standard kódtár a mindenhol használt tartalék kódtár, kivéve azokat az eseteket, amikor a NuGet-csomag keretrendszerspecifikus implementációt kínál. A többszörös célzás lehetővé teszi a feltételes fordítás használatát a kódban, és keretrendszerspecifikus API-kat hívhat meg.
✔️ FONTOLJA meg a .NET-implementációk célzását a .NET Standard mellett.
A .NET-implementációk megcélzása lehetővé teszi a .NET Standardon kívüli platformspecifikus API-k meghívását.
Ha ezt teszi, ne vesse el a .NET Standard támogatását. Ehelyett dobjon ki a megvalósításból, és kínáljon képességi API-kat. Így a kódtár bárhol használható, és támogatja a funkciók futásidejű megvilágítását.
public static class GpsLocation
{
// This project uses multi-targeting to expose device-specific APIs to .NET Standard.
public static async Task<(double latitude, double longitude)> GetCoordinatesAsync()
{
#if NET462
return CallDotNetFrameworkApi();
#elif WINDOWS_UWP
return CallUwpApi();
#else
throw new PlatformNotSupportedException();
#endif
}
// Allows callers to check without having to catch PlatformNotSupportedException
// or replicating the OS check.
public static bool IsSupported
{
get
{
#if NET462 || WINDOWS_UWP
return true;
#else
return false;
#endif
}
}
}
✔️ FONTOLJA meg a több célzást akkor is, ha a forráskód minden célhoz azonos, ha a projekt rendelkezik tár- vagy csomagfüggőségekkel.
Előfordulhat, hogy a projekt függő csomagjai – akár közvetlen, akár alsóbb rétegben – ugyanazt a kód API-kat használják, miközben a függő szerelvény különböző verzióiba vannak csomagolva cél-keretrendszerenként. Adott célok hozzáadása biztosítja, hogy a fogyasztóknak ne kelljen hozzáadniuk vagy frissíteniük a szerelvénykötés-átirányításokat.
❌ KERÜLJE a több célzást és a .NET Standard célzását, ha a forráskód minden célhoz azonos, és a projekt nem rendelkezik kódtár- vagy csomagfüggőségekkel.
A .NET Standard szerelvényt a NuGet automatikusan használja. Az egyes .NET-implementációk megcélzása előny nélkül növeli a *.nupkg méretet.
✔️ FONTOLJA meg egy cél net462 hozzáadását a cél felajánlásakor netstandard2.0 .
A .NET Standard 2.0 .NET-keretrendszer-ből való használata a 4.7.2-.NET-keretrendszer néhány problémájával foglalkozik. A .NET-keretrendszer 4.6.2- 4.7.1-en még .NET-keretrendszer fejlesztők számára a 4.6.2-.NET-keretrendszer hez készült bináris fájlokkal javíthatja a felhasználói élményt.
✔️ A DO egy NuGet-csomag használatával terjeszti a kódtárat.
A NuGet kiválasztja a fejlesztő számára a legjobb célt, és védi őket, hogy a megfelelő megvalósítást válasszák.
✔️ A DO egy projektfájl tulajdonságát TargetFrameworks használja több célzás esetén.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- This project will output netstandard2.0 and net462 assemblies -->
<TargetFrameworks>netstandard2.0;net462</TargetFrameworks>
</PropertyGroup>
</Project>
❌ NE módosítsa a szerelvény nevét, vagy használjon különböző szerelvényneveket a tár által lefordított TFM-ekhez. A kódtárak közötti függőségek miatt a TFM-enként eltérő szerelvénynevekkel rendelkező több célzás megszakíthatja a csomagfogyasztókat. A szerelvénynek minden TFM-nek ugyanazzal a névvel kell rendelkeznie.
Régebbi célok
A .NET támogatja a már nem támogatott .NET-keretrendszer, valamint a már nem használt platformok célzását. Bár a tárat a lehető legtöbb célon kell dolgozni, a hiányzó API-k megkerülése jelentős többletterhelést jelenthet. Figyelembe véve azok elérését és korlátait, bizonyos keretrendszereket már nem érdemes célba venni.
❌ NE tartalmazzon hordozható osztálytárat (PCL) célként. Például: portable-net45+win8+wpa81+wp8.
A .NET Standard a platformfüggetlen .NET-kódtárak támogatásának és a PCL-k cseréjének modern módja.
❌ NE tartalmazzon olyan célokat a .NET-platformokhoz, amelyek már nem támogatottak. Például: SL4. WP
A tartalom forrása a GitHubon található, ahol létrehozhat és áttekinthet problémákat és lekéréses kérelmeket is. További információért tekintse meg a közreműködői útmutatónkat.
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást:
A Windows-fejlesztők különböző lehetőségeket kínálnak a Windowson futó alkalmazások létrehozására. Ez a modul bemutatja a Windows-fejlesztéshez elérhető Windows felhasználói felületi keretrendszereket. Útmutatást is nyújt az alkalmazáshoz legjobb keretrendszer kiválasztásához.