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

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:

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:

  • Alkalmazástartományok

    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.

  • Távoli elérés

    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() és EndInvoke() esetén PlatformNotSupportedException-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.

  • Biztonsági átláthatóság

    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

    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.

Lásd még