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.
Ez a cikk áttekintést nyújt arról, hogy mit érdemes figyelembe venni a kód .NET-keretrendszerből .NET-be (korábbi nevén .NET Core) történő portolása során. A .NET-keretrendszerből a .NET-keretrendszerbe történő portolás sok projekt esetében viszonylag egyszerű. A projektek összetettsége határozza meg, hogy mennyi munkát kell elvégeznie a projektfájlok kezdeti frissítése után.
Azok a projektek, amelyekben az alkalmazásmodell elérhető a .NET-ben, például kódtárakban, konzolalkalmazásokban és asztali alkalmazásokban, általában kevés változást igényelnek. Az új alkalmazásmodellt igénylő projektek, például az ASP.NET-ről ASP.NET Core-ra való áttérés, több munkát igényel. A régi alkalmazásmodell számos mintája rendelkezik az átalakítás során használható egyenértékűkkel.
Asztali Windows-technológiák
A .NET-keretrendszerhez létrehozott alkalmazások közül sok olyan asztali technológiát használ, mint a Windows Forms vagy a Windows Presentation Foundation (WPF). A Windows Forms és a WPF is elérhető a .NET-ben, de továbbra is csak Windows-technológiák maradnak.
Windows Forms- vagy WPF-alkalmazás frissítése előtt vegye figyelembe a következő függőségeket:
- A .NET-projektfájlok más formátumot használnak, mint a .NET-keretrendszer.
- A projekt olyan API-t használhat, amely nem érhető el a .NET-ben.
- Előfordulhat, hogy a külső vezérlők és kódtárak nem lettek átvéve a .NET-be, és csak a .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 a .NET-keretrendszeren keresztüli fejlesztéseket is tartalmaz.
Az asztali alkalmazás .NET-re való frissítésével kapcsolatos oktatóanyagokért tekintse meg az alábbi cikkek egyikét:
- WPF asztali alkalmazás frissítése .NET-re
- .NET-keretrendszer Windows Forms-alkalmazások frissítése .NET-re
Windows-specifikus API-k
Az alkalmazások továbbra is használhatnak natív könyvtárakat a .NET által támogatott platformokon. Ez a technológia nem korlátozódik a Windowsra. Ha azonban a hivatkozott kódtár Windows-specifikus, például user32.dll vagy kernel32.dll, akkor a kód csak Windows rendszeren működik. Minden olyan platform esetében, amelyen futtatni szeretné az alkalmazást, platformspecifikus verziókat kell találnia, vagy elég általánossá kell tennie a kódot ahhoz, hogy minden platformon fusson.
Amikor egy alkalmazást a .NET-keretrendszerből a .NET-be portoz, az alkalmazás valószínűleg a .NET-keretrendszer által biztosított kódtárat használta. A .NET-keretrendszerben elérhető számos API-t nem a .NET-be portoltunk, mert a Windows-specifikus technológiára, például a Windows beállításjegyzékre vagy a GDI+ rajzmodellre támaszkodtak.
A Windows kompatibilitási csomag a .NET-keretrendszer API felületének nagy részét biztosítja a .NET-nek, és a Microsoft.Windows.Compatibility NuGet csomagon keresztül érhető el.
További információ: A Windows kompatibilitási csomag használata a .NET-hez való portkódhoz.
.NET-keretrendszer kompatibilitási módja
A .NET-keretrendszer kompatibilitási módja a .NET Standard 2.0-ban lett bevezetve. A kompatibilitási mód lehetővé teszi, hogy a .NET Standard és a .NET-projektek úgy hivatkozzon a .NET-keretrendszer kódtárakra, mintha a projekt célkeretéhez lettek volna lefordítva. Egyes .NET-implementációk azonban a .NET-keretrendszer nagyobb részét támogatják, mint mások. A .NET Core 3.0 például kiterjeszti a .NET-keretrendszer kompatibilitási módját a Windows Formsra és a WPF-re. 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 WPF API-kat használ, de számos portálási forgatókönyv letiltását oldja fel. További információért lásd: Elemezze a függőségeit a kód .NET-keretrendszerből .NET-re történő átviteléhez.
A .NET-keretrendszer-kódtárakra való hivatkozás nem minden esetben működik, mivel attól függ, hogy mely .NET-keretrendszer API-kat használták, és hogy a projekt cél keretrendszere támogatja-e ezeket az API-kat. Emellett a .NET-keretrendszer API-k némelyike csak Windows rendszeren fog működni. A .NET-keretrendszer kompatibilitási módja feloldja számos portálási forgatókönyv letiltását, de tesztelje a projekteket, hogy futásidőben is működjenek. További információ: A függőségek elemzése a kód .NET-keretrendszerről való áthozatalához.
SDK-stílusú projektek cél keretrendszerének változásai
Ahogy korábban említettük, a .NET-projektfájlok más formátumot használnak, mint az SDK-stílusú projektformátum. Még ha nem is a .NET-keretrendszerről a .NET-re vált, akkor is frissítenie kell a projektfájlt a legújabb formátumra. A cél keretrendszer meghatározásának módja az SDK-stílusú projektekben eltérő. A .NET-keretrendszerben a <TargetFrameworkVersion> tulajdonságot egy olyan monikerrel használja a rendszer, amely meghatározza a .NET-keretrendszer verzióját. A .NET Framework 4.7.2 például a következő kódrészlethez hasonlóan néz ki:
<PropertyGroup>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
</PropertyGroup>
Egy SDK-stílusú projekt egy másik tulajdonság használatával azonosítja a cél keretrendszert, a tulajdonságot <TargetFramework> . A .NET-keretrendszer megcélzásakor a moniker a net szimbólummal kezdődik és a .NET-keretrendszer verziójával folytatódik, pontok nélkül. A .NET-keretrendszer 4.7.2-et célzó moniker például a következő net472:
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
Az összes cél moniker listáját az SDK-stílusú projektek cél-keretrendszerei című témakörben találja.
Nem elérhető technológiák
A .NET-keretrendszerben vannak olyan technológiák, amelyek nem léteznek a .NET-ben:
-
Más 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.
-
A remoting 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 a távoli elérés alternatívájaként, mint például az System.IO.Pipes vagy MemoryMappedFile osztály. Összetettebb forgatókönyvek esetén fontolja meg az olyan keretrendszereket, mint a StreamJsonRpc vagy a ASP.NET Core ( gRPC vagy RESTful Webes API-szolgáltatások használata).
Mivel a távkapcsolat nem támogatott, a delegált objektumokra való hívások
BeginInvoke()ésEndInvoke()eseténPlatformNotSupportedException-t dobnak. Kódhozzáférés biztonsága (CAS)
A CAS a .NET-keretrendszer által támogatott sandbox technika volt, de a .NET-keretrendszer 4.0-s verziójában elavulttá vált. 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 megadott biztonsági határokat, például virtualizálást, tárolókat vagy felhasználói fiókokat.
-
A CAS-hoz hasonlóan a biztonsági átláthatósági tesztkörnyezeti technika már nem ajánlott .NET-keretrendszer-alkalmazásokhoz, és a .NET-ben nem támogatott. Ehelyett használjon az operációs rendszer által megadott biztonsági határokat, például virtualizálást, tárolókat vagy felhasználói fiókokat.
-
System.EnterpriseServices A (COM+) nem támogatott a .NET-ben.
Windows Workflow Foundation (WF)
A WF nem támogatott a .NET-ben. Másik lehetőségként tekintse meg a CoreWF-et.
Ezekről a nem támogatott technológiákról további információt a .NET 6+-on nem elérhető .NET-keretrendszer-technológiákban talál.
Platformfüggetlen
A .NET (korábbi nevén .NET Core) úgy lett tervezve, hogy platformfüggetlen legyen. Ha a kód nem függ a Windows-specifikus technológiáktól, akkor más platformokon is futtatható, például macOS, Linux és Android rendszereken. Az ilyen kód a következő projekttípusokat tartalmazza:
- Libraries
- Konzolalapú eszközök
- Automation
- ASP.NET webhelyek
A .NET-keretrendszer egy Windowsra érvényes összetevő. Ha a kód Windows-specifikus technológiákat vagy API-kat használ, például a Windows Formst és a WPF-et, a kód továbbra is futtatható .NET-en, de más operációs rendszereken nem.
Előfordulhat, hogy a könyvtár vagy a konzolalapú alkalmazás platformfüggetlenül használható anélkül, hogy sokat módosítana. A .NET-re való portoláskor érdemes lehet ezt figyelembe venni, és tesztelni az alkalmazást más platformokon.
A .NET Standard jövője
A .NET Standard a .NET API-k formális specifikációja, amelyek több .NET-implementációban is elérhetők. A .NET Standard mögött az volt a motiváció, hogy egységesebb legyen a .NET-ökoszisztéma. A .NET 5-től kezdve 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-keretrendszert utoljára a .NET Standard 2.0 támogatja.
A portolást segítő eszközök
Az alkalmazások .NET-keretrendszerből .NET-be történő manuális portolása helyett különböző eszközökkel automatizálhatja a frissítést. Az összetett projektek portolása önmagában is összetett folyamat. Az eszközök segíthetnek ebben az úton.
Még ha az alkalmazás portolását segítő eszközt is használ, tekintse át a jelen cikk portolásával kapcsolatos szempontokat .
GitHub Copilot modernizációs ügynök
A GitHub Copilot modernizálása egy GitHub Copilot csevegőügynök, amely segít a projektek tervezésében és frissítésében a .NET újabb verzióira, az Azure-ba való migrálásra, a függőségek frissítésére és a kódjavítások alkalmazására. Az Azure-migrálást a .NET-hez készült alkalmazás- és kódértékelés hajtja
Ez a csevegőügynök a következő frissítési útvonalakat támogatja:
- Frissítse a projekteket a régebbi .NET-verziókról a legújabbra.
- Frissítse a projekteket a .NET-keretrendszerről a .NET legújabb verziójára.
- A kódbázis modernizálása új funkciókkal.
- Összetevők és szolgáltatások migrálása az Azure-ba.
Emellett különböző projekttípusokon is működik, például:
- ASP.NET és kapcsolódó technológiák, például MVC, Razor Pages, Web API
- Blazor
- Azure Functions
- Windows megjelenítési alaprendszer
- Windows Forms
- Osztálykönyvtárak
- Konzolalkalmazások
Mikor érdemes használni:
A GitHub Copilot modernizálását akkor használhatja, ha AI-alapú, végpontok közötti felhasználói élményt szeretne a .NET-keretrendszer projektjeinek és függőségeinek modern .NET-re való frissítéséhez – amely magában foglalja az alkalmazások Azure-ba való migrálásának értékelését, tervezését, szervizelését és útmutatását.
Alkalmazás- és kódértékelés a .NET-hez
A .NET-hez készült Azure Migrate-alkalmazás és kódértékelés kód- és alkalmazáselemzést, valamint a felhőbeli üzembe helyezések tervezésére vonatkozó javaslatokat biztosít. Segítségével magabiztosan futtathat üzleti szempontból kritikus megoldásokat a felhőben a forráskód fejlesztőközpontú értékelésével. Az eszköz az iparági ajánlott eljárásokat követve javaslatokat és példákat is kínál az Azure-beli kódok és konfigurációk optimalizálásához.
A .NET élmény GitHub Copilot általi modernizálásához is ezt az eszközt használják.
Mikor érdemes használni:
A .NET-eszközkészlethez készült Azure Migrate-alkalmazás és -kódértékelés segítségével felmérhet és javaslatokat alkalmazhat egy meglévő kódbázis Azure-ba való migrálásához. Az Azure Migrate-alkalmazás és a kódértékelés lényegében a GitHub Copilot .NET-élményhez való modernizálásának egy része.
.NET frissítési segéd
A .NET Frissítési segéd egy parancssori eszköz, amely különböző .NET-keretrendszeralkalmazásokon futtatható. A .NET-keretrendszeralkalmazások .NET-re való frissítésének elősegítésére szolgál. Az eszköz futtatása után az alkalmazás a legtöbb esetben több erőfeszítést igényel a frissítés befejezéséhez. Az eszköz tartalmazza az elemzők telepítését, amelyek segíthetnek a frissítés végrehajtásában. Ez az eszköz a következő .NET-keretrendszer-alkalmazásokon működik:
- Windows Forms
- WPF
- ASP.NET MVC
- Console
- Osztálykönyvtárak
Ez az eszköz a cikkben felsorolt egyéb eszközöket, például a try-convert eszközt használja, és végigvezeti a frissítési folyamatot. Az eszközről további információt a .NET frissítési segéd áttekintésében talál.
Mikor érdemes használni:
Használja, ha nem érhető el a GitHub Copilot modernizálásához hasonló MI-alapú megoldás.
try-convert
Az try-convert eszköz egy .NET-alapú globális eszköz, amely képes egy projektet vagy egy teljes megoldást .NET SDK-vá alakítani, beleértve az asztali alkalmazások .NET-be való áthelyezését is. Ez az eszköz azonban nem ajánlott, ha a projekt bonyolult összeállítási folyamattal rendelkezik, például egyéni feladatokkal, célokkal vagy importálásokkal.
További információ: try-convert GitHub-adattár.
Platformkompatibilitás-elemző
A platformkompatibilitás-elemző elemzi, hogy egy API-t használ-e, amely PlatformNotSupportedException-t dob a futási időben. Bár ezen API-k egyikének megkeresése nem valószínű, ha a .NET-keretrendszer 4.7.2-s vagy újabb verziójáról lép át, érdemes ellenőrizni. A .NET-en kivételeket okozó API-kkal kapcsolatos további információkért lásd a .NET Core-on mindig kivételeket kivető API-kat.
További információ: Platformkompatibilitás-elemző.
A portolással kapcsolatos szempontok
Az alkalmazás .NET-be történő portolása során vegye figyelembe az alábbi javaslatokat:
✔️ FONTOLJA meg a GitHub Copilot modernizálását a projektek frissítéséhez. A GitHub Copilot hatékony a inkompatibilitások azonosításában és javításában a portoláskor. Automatizálja a cikkben részletezett manuális lépések többségét, és nagyszerű kiindulópontot nyújt a frissítési útvonal folytatásához.
✔️ ELŐSZÖR VIZSGÁLJA MEG a függőségeket. A függőségeknek a .NET, a .NET Standard vagy a .NET Core protokollt kell célba vennie.
Frissítsen egy NuGet packages.config fájlból a projektfájlban lévő PackageReference beállításokra. Visual Studio használatával konvertálja a package.config fájlt.
✔️ ÉRDEMES lehet frissíteni a legújabb projektfájl formátumra, még akkor is, ha még nem tudja portolni az alkalmazást. A .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, a formátum a .NET-keretrendszerrel is működik. Ha a projektfájlt a legújabb formátumban használja, az jó alapot nyújt az alkalmazás későbbi portolásához.
✔️ Vegye figyelembe, hogy célozza meg újra a .NET Framework projektjét a legalább a .NET Framework 4.7.2 verzióra. 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, hogy a .NET 8-ra célozzon, amely egy hosszú távú támogatású (LTS) kiadás.
✔️ Célozza meg a .NET 8+ verziót a Windows Forms és WPF projekteknél. A .NET 8 és újabb verziói számos fejlesztést tartalmaznak az asztali alkalmazásokhoz.
✔️ Fontolja meg a .NET Standard 2.0 célzását, ha olyan kódtárat frissít, amelyet .NET-keretrendszer-projektekhez is használhat. A kódtár többfunkciós is lehet, és a .NET-keretrendszert és a .NET Standardot is megcélozza.
✔️ MINDENKÉPPEN adjon referenciát a Microsoft.Windows.Compatibility NuGet csomagra, ha a migrálás után hibák lépnek fel a hiányzó API-kkal kapcsolatban. A .NET-keretrendszer API-felületének nagy része a NuGet-csomagon keresztül érhető el a .NET számára.