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:
- Project .NET-fájlok formátuma eltér a .NET-keretrendszer formátumtól.
- Előfordulhat, hogy a projekt olyan API-t használ, amely nem érhető el a .NET-ben.
- 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.
- 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:
- .NET-KERETRENDSZER WPF-alkalmazások migrálása a .NET-be
- .NET-keretrendszer Windows Forms-alkalmazások migrálása a .NET-be
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:
-
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.
-
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).
-
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 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 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.