Megosztás a következőn keresztül:


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 áttelepí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. Azok a projektek, amelyek új alkalmazásmodellt igényelnek, például az ASP.NET-ről ASP.NET Core-ra való átállás, több munkát igényelnek. 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 áttelepí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ó migrálásával kapcsolatos oktatóanyagokért tekintse meg az alábbi cikkek egyikét:

Windows-specifikus API-k

Az alkalmazások "P/Invoke" révén 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ókért lásd: A Windows kompatibilitási csomag használata a kód áttéréséhez a .NET-re.

.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: A függőségek elemzése a kód átültetéséhez a .NET-keretrendszerből a .NET-be.

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ókért lásd a függőségek elemzését a .NET-keretrendszerből egy másik keretrendszerbe történő kód átviteléhez.

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 net-vel kezdődik, és a .NET-keretrendszer verziójával, időszakok nélkül, végződik. 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

    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.

  • 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) mechanizmusait a távoli elérés alternatívájaként, például a System.IO.Pipes osztály vagy a 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 az adattávoli elérés nem támogatott, a BeginInvoke() és a EndInvoke() hívásai a delegált objektumokon PlatformNotSupportedException kivételt fognak dobni.

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

    A CAS egy olyan sandbox technika volt, amelyet a .NET-keretrendszer támogatott, de a .NET-keretrendszer 4.0-s verziójában elavultként lett megjelölve. 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. Alternatívát a CoreWFalatt talál.

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 van 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:

  • Könyvtárak
  • Konzolalapú eszközök
  • Automatizálás
  • ASP.NET webhelyek

A .NET-keretrendszer kizárólag egy Windows-ö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.

Elképzelhető, hogy a könyvtár vagy a konzolalapú alkalmazás nagyobb módosítás nélkül platformfüggetlenül használható. 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.

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 migrálás néhány aspektusát. 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 .

.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 nagyobb 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ő .NET-keretrendszer-alkalmazásokon működik:

  • Windows Forms
  • WPF (Windows Presentation Foundation)
  • ASP.NET MVC
  • Konzol
  • 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 az áttelepítési folyamatot. Az eszközről további információt a .NET frissítési segéd áttekintésében talál.

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 olyan API-t használ-e, amelyik PlatformNotSupportedException dob futás közben. 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, hogy a .NET frissítési segéd használatával migrálja a projektjeit. Annak ellenére, hogy ez az eszköz előzetes verzióban érhető el, automatizálja a cikkben részletezett 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, a .NET Standard vagy a .NET Core protokollt kell célba vennie.

✔️ Migráljon egy NuGet packages.config fájlból a projektfájl beállításaiba PackageReference. A package.config fájl konvertálása Visual Studióval.

✔️ É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.

✔️ Tegyél bármit is, irányítsd újra a .NET Framework projektet legalább .NET Framework 4.7.2-re. 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.

✔️ GONDOLKODJON el a .NET 8 célozásán, amely egy hosszú távú támogatott verzió (LTS).

✔️ Használd a .NET 6+-t Windows Forms és WPF projektekhez. A .NET 6-os é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 migrál, 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.

Feltétlenül adjon hivatkozást a Microsoft.Windows.Compatibility NuGet csomagra, ha a migrálás után hibaüzenetet kap a hiányzó API-król. 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