A .NET-keretrendszer-ból a .NET-be történő portolás áttekintése

Ez a cikk áttekintést nyújt arról, hogy mit kell figyelembe vennie, amikor a kódot a .NET-keretrendszer-ból a .NET-be (korábbi nevén .NET Core) portoljuk. A .NET-be történő portolás számos projekt .NET-keretrendszer-ból viszonylag egyszerű. A projektek összetettsége határozza meg, hogy mennyi munkát fog elvégezni a projektfájlok kezdeti áttelepítése után.

Azok a projektek, amelyekben az alkalmazásmodell elérhető a .NET-ben (például kódtárak, konzolalkalmazások és asztali alkalmazások), általában kevés módosítást igényelnek. Az új alkalmazásmodellt igénylő projektek, például a ASP.NET ASP.NET Core való áthelyezése több munkát igényelnek. A régi alkalmazásmodell számos mintája rendelkezik az átalakítás során használható megfelelőkkel.

asztali technológiák Windows

Számos alkalmazás .NET-keretrendszer asztali technológiát használ, például Windows Forms vagy Windows megjelenítési alaprendszer (WPF). A Windows Forms és a WPF is át lett adva a .NET-be, de ezek továbbra is csak Windows technológiák.

A Windows Forms vagy WPF-alkalmazások migrálása előtt vegye figyelembe a következő függőségeket:

  1. Project .NET-fájlok formátuma eltér a .NET-keretrendszer formátumtól.
  2. Előfordulhat, hogy a projekt olyan API-t használ, amely nem érhető el a .NET-ben.
  3. Előfordulhat, hogy a külső vezérlőket és kódtárakat nem portolták a .NET-be, és csak .NET-keretrendszer számára érhetők el.
  4. A projekt olyan technológiát használ, amely már nem érhető el a .NET-ben.

A .NET a Windows Forms és a WPF nyílt forráskódú verzióit használja, és .NET-keretrendszer továbbfejlesztéseit tartalmazza.

Az asztali alkalmazás .NET 6-ra való migrálásával kapcsolatos oktatóanyagokért tekintse meg az alábbi cikkek egyikét:

Windows-specifikus API-k

Az alkalmazások továbbra is használhatnak P/Invoke natív kódtárakat a .NET által támogatott platformokon. Ez a technológia nem korlátozódik Windows. Ha azonban a hivatkozott kódtár Windows-specifikus, például user32.dll vagy kernel32.dll, akkor a kód csak Windows működik. Minden olyan platformhoz, amelyen futtatni szeretné az alkalmazást, platformspecifikus verziókat kell keresnie, vagy elég általánossá kell tennie a kódot ahhoz, hogy minden platformon fusson.

Amikor .NET-keretrendszer-ről .NET-be portolt egy alkalmazást, az alkalmazás valószínűleg egy, a .NET-keretrendszer elosztott kódtárat használt. Számos, .NET-keretrendszer elérhető API-t nem portáltak a .NET-be, mert Windows-specifikus technológiára, például a Windows Registryre vagy a GDI+ rajzmodellre támaszkodtak.

A Windows kompatibilitási csomag az .NET-keretrendszer API felületének nagy részét biztosítja a .NET-nek, és a Microsoft.Windows biztosítja. Kompatibilitási NuGet-csomag.

További információ: A Windows kompatibilitási csomag használata a .NET-hez való portkódhoz.

.NET-keretrendszer kompatibilitási mód

A .NET-keretrendszer kompatibilis üzemmód a .NET Standard 2.0-ban lett bevezetve. Ez a kompatibilitási mód lehetővé teszi, hogy a .NET Standard és a .NET 5+ (és .NET Core 3.1) projektek csak Windows .NET-keretrendszer kódtárakra hivatkozzon. A .NET-keretrendszer kódtárakra való hivatkozás nem minden projekt esetében működik, például ha a kódtár Windows megjelenítési alaprendszer (WPF) API-kat használ, de számos portálási forgatókönyvet felold. További információ: A függőségek elemzése a .NET-keretrendszer-ból a .NET-be irányuló portkóddal.

Nem elérhető technológiák

A .NET-keretrendszer néhány olyan technológiája létezik, amelyek nem léteznek a .NET-ben:

  • Alkalmazástartományok

    További alkalmazástartományok létrehozása nem támogatott. A kódelkülönítéshez használjon különálló folyamatokat vagy tárolókat alternatívaként.

  • Újraegyenesítés

    Az újraegyenlítés az alkalmazástartományok közötti kommunikációra szolgál, amelyek már nem támogatottak. A folyamatok közötti egyszerű kommunikációhoz fontolja meg a folyamatközi kommunikációs (IPC) mechanizmusokat az újraegyenlítés alternatíváiként, például az System.IO.Pipes osztály vagy az MemoryMappedFile osztály helyett. Összetettebb forgatókönyvek esetén fontolja meg olyan keretrendszerek használatát, mint a StreamJsonRpc vagy a ASP.NET Core (gRPC vagy RESTful webes API-szolgáltatások használatával).

  • Kódhozzáférés-biztonság (CAS)

    A CAS egy .NET-keretrendszer által támogatott, de a 4.0-s .NET-keretrendszer-ben elavult tesztkörnyezeti technika volt. A biztonsági átláthatóság váltotta fel, és a .NET nem támogatja. Ehelyett használjon az operációs rendszer által biztosított biztonsági határokat, például virtualizálást, tárolókat vagy felhasználói fiókokat.

  • A biztonság átláthatósága

    A CAS-hoz hasonlóan ez a védőfalas módszer már nem ajánlott .NET-keretrendszer alkalmazásokhoz, és a .NET nem támogatja. Ehelyett használjon az operációs rendszer által biztosított biztonsági határokat, például virtualizálást, tárolókat vagy felhasználói fiókokat.

  • System.EnterpriseServices

    System.EnterpriseServices A .NET nem támogatja a (COM+) protokollt.

  • Windows Workflow Foundation (WF)

    A WF nem támogatott a .NET 5+-ban (beleértve a .NET Core-t is). Alternatív megoldásként tekintse meg a CoreWF-et.

További információ ezekről a nem támogatott technológiákról: .NET-keretrendszer .NET Core-on és .NET 5+-on nem elérhető technológiák.

Platformfüggetlen

A .NET (korábbi nevén .NET Core) platformfüggetlennek lett tervezve. Ha a kód nem függ Windows-specifikus technológiáktól, akkor más platformokon is futtatható, például macOS, Linux és Android. Ide tartoznak például a következő projekttípusok:

  • Kódtárak
  • Konzolalapú eszközök
  • Automation
  • webhelyek ASP.NET

.NET-keretrendszer csak Windows összetevő. Ha a kód Windows-specifikus technológiákat vagy API-kat használ, például Windows Forms és Windows megjelenítési alaprendszer (WPF), a kód továbbra is futtatható a .NET-en, de más operációs rendszereken nem.

Előfordulhat, hogy a kódtár vagy a konzolalapú alkalmazás platformfüggetlenül használható anélkül, hogy sokat módosítana. A .NET-be történő portoláskor érdemes lehet ezt figyelembe venni, és más platformokon tesztelni az alkalmazást.

A .NET Standard jövője

A .NET Standard a több .NET-implementációban elérhető .NET API-k formális specifikációja. A .NET Standard mögött az volt a motiváció, hogy egységesíteni kell a .NET-ökoszisztémát. A .NET 5-tel kezdődően az egységesség megállapítására más megközelítést alkalmaztak, és ez az új megközelítés számos esetben szükségtelenné teszi a .NET Standard használatát. További információ: .NET 5 és .NET Standard.

A .NET Standard 2.0 volt az utolsó verzió, amely támogatja a .NET-keretrendszer.

Portolást segítő eszközök

Az alkalmazások .NET-keretrendszer-ból .NET-be történő manuális portolása helyett különböző eszközökkel automatizálhatja a migrálás egyes aspektusait. Az összetett projektek portolása önmagában is összetett folyamat. Ezek az eszközök segíthetnek ebben az úton.

Még ha egy eszközt is használ az alkalmazás portolásához, tekintse át a jelen cikk portolással kapcsolatos szakaszát .

.NET frissítési segéd

A .NET Frissítési segéd egy parancssori eszköz, amely különböző típusú .NET-keretrendszer-alkalmazásokon futtatható. Úgy tervezték, hogy segítsen .NET-keretrendszer alkalmazások .NET 5-re való frissítésében. Az eszköz futtatása után az alkalmazás a legtöbb esetben több erőfeszítést igényel a migrálás befejezéséhez. Az eszköz tartalmazza az elemzők telepítését, amelyek segíthetnek a migrálás befejezésében. Ez az eszköz a következő típusú .NET-keretrendszer alkalmazásokon működik:

  • Windows Forms
  • WPF
  • ASP.NET, MVC
  • Console
  • Osztálytárak

Ez az eszköz a cikkben felsorolt egyéb eszközöket használja, és végigvezeti a migrálási folyamaton. Az eszközzel kapcsolatos további információkért lásd a .NET frissítési segéd áttekintését.

try-convert

A try-convert eszköz egy globális .NET-eszköz, amely képes egy projektet vagy egy teljes megoldást .NET SDK-ra konvertálni, beleértve az asztali alkalmazásokat a .NET 5-be való áthelyezését is. Ez az eszköz azonban nem ajánlott, ha a projekt összetett buildelési folyamattal rendelkezik, például egyéni feladatokkal, célokkal vagy importálásokkal.

További információt a try-convert GitHub adattárban talál.

.NET hordozhatósági elemző

A .NET portability Analyzer egy olyan eszköz, amely szerelvényeket elemez, és részletes jelentést nyújt azokról a .NET API-król, amelyek hiányoznak ahhoz, hogy az alkalmazások vagy kódtárak hordozhatóak legyenek a megadott célzott .NET-platformokon.

A .NET hordozhatósági elemző Visual Studio való használatához telepítse a bővítményt a piactérről.

További információ: A .NET hordozhatósági elemzője.

Platformkompatibilitás-elemző

A platformkompatibilitás-elemző elemzi, hogy olyan API-t használ-e, amely futásidőben dob PlatformNotSupportedException . Bár ez nem gyakori, ha a .NET-keretrendszer 4.7.2-s vagy újabb verzióról lép át, érdemes ellenőrizni. A .NET-en kivételeket okozó API-kkal kapcsolatos további információkért tekintse meg azokat az API-kat, amelyek mindig kivételeket adnak a .NET Core-on.

További információ: Platformkompatibilitás-elemző.

A portolással kapcsolatos szempontok

Amikor az alkalmazást a .NET-be portolja, vegye figyelembe az alábbi javaslatokat.

✔️ Fontolja meg a .NET frissítési segéd használatát a projektek migrálásához. Annak ellenére, hogy ez az eszköz előzetes verzióban érhető el, automatizálja a cikkben ismertetett manuális lépések többségét, és nagyszerű kiindulópontot nyújt a migrálási útvonal folytatásához.

✔️ Először vizsgálja meg a függőségeket. A függőségeknek a .NET 5, a .NET Standard vagy a .NET Core-ra kell irányulniuk.

✔️ DO migrálás NuGet -packages.config fájlból a projektfájl beállításaiba PackageReference . A fájl konvertálása package.configVisual Studio használatával.

✔️ Érdemes lehet a legújabb projektfájl-formátumra frissíteni, még akkor is, ha még nem tudja portolni az alkalmazást. .NET-keretrendszer projektek elavult projektformátumot használnak. Annak ellenére, hogy a legújabb, SDK-stílusú projekteknek nevezett projektformátum a .NET Core-hoz és azon túl is készült, .NET-keretrendszer működnek. Ha a projektfájlt a legújabb formátumban használja, jó alapot biztosít az alkalmazás későbbi portolásához.

✔️ Do retarget a .NET-keretrendszer projekt legalább .NET-keretrendszer 4.7.2. Ez biztosítja a legújabb API-alternatívák rendelkezésre állását olyan esetekben, amikor a .NET Standard nem támogatja a meglévő API-kat.

✔️ Fontolja meg a .NET 5 célzását a .NET Core 3.1 helyett. Míg a .NET Core 3.1 hosszú távú támogatás alatt áll, a .NET 5 a legújabb, a .NET 6 pedig LTS lesz a kiadáskor.

✔️ DO cél .NET 5 Windows Forms és WPF projektekhez. A .NET 5 számos fejlesztést tartalmaz az asztali alkalmazásokhoz.

✔️ Fontolja meg a .NET Standard 2.0 célzását, ha olyan kódtárat migrál, amely .NET-keretrendszer projektekhez is használható. A kódtárat többoldalasan is létrehozhatja, és .NET-keretrendszer és .NET Standardet is megcélozhat.

✔️ Do add reference to the Microsoft.Windows. Kompatibilitási NuGet-csomag, ha a migrálás után hiányzó API-kat kap. A .NET-keretrendszer API-felület nagy része elérhető a .NET számára a NuGet-csomagon keresztül.

Lásd még