Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek obsahuje přehled toho, co byste měli zvážit při přenosu kódu z rozhraní .NET Framework do .NET (dříve s názvem .NET Core). Přenos na .NET z rozhraní .NET Framework je poměrně jednoduchý pro mnoho projektů. Složitost projektů určuje, kolik práce budete muset udělat po počáteční migraci souborů projektu.
Projekty, ve kterých je model aplikace dostupný v .NET, jako jsou knihovny, konzolové aplikace a desktopové aplikace, obvykle vyžadují malou změnu. Projekty, které vyžadují nový model aplikace, například přechod na ASP.NET Core z ASP.NET, vyžadují více práce. Mnoho vzorů ze starého modelu aplikace má ekvivalenty, které je možné použít během převodu.
Desktopové technologie Windows
Mnoho aplikací vytvořených pro .NET Framework používá desktopovou technologii, jako je Windows Forms nebo Windows Presentation Foundation (WPF). Windows Forms i WPF jsou k dispozici v .NET, ale zůstávají technologiemi jen pro Windows.
Před migrací aplikace Windows Forms nebo WPF zvažte následující závislosti:
- Soubory projektu pro .NET používají jiný formát než .NET Framework.
- Váš projekt může používat rozhraní API, které není dostupné v .NET.
- Ovládací prvky a knihovny třetích stran nemusí být portovány do .NET a zůstávají dostupné pouze pro rozhraní .NET Framework.
- Váš projekt používá technologii, která už není k dispozici v .NET.
.NET používá opensourcové verze Windows Forms a WPF a zahrnuje vylepšení rozhraní .NET Framework.
Kurzy k migraci desktopové aplikace na .NET najdete v jednom z následujících článků:
- Postup upgradu desktopové aplikace WPF na .NET
- Migrace aplikací .NET Framework pro Windows Forms do .NET
Rozhraní API specifická pro Windows
Aplikace mohou stále používat P/Invoke k volání nativních knihoven na platformách podporovaných rozhraním .NET. Tato technologie není omezená na Windows. Pokud je však knihovna, na kterou odkazujete, specifická pro Windows, například user32.dll nebo kernel32.dll, pak kód funguje jenom ve Windows. Pro každou platformu, na které má vaše aplikace běžet, musíte buď najít verze specifické pro danou platformu, nebo nastavit, aby váš kód běžel na všech platformách.
Při přenosu aplikace z rozhraní .NET Framework do .NET vaše aplikace pravděpodobně používala knihovnu poskytovanou rozhraním .NET Framework. Řada rozhraní API, která byla k dispozici v rozhraní .NET Framework, nebyla portována do rozhraní .NET, protože spoléhala na technologii specifickou pro Windows, jako je registr Systému Windows nebo model výkresu GDI+.
Sada Windows Compatibility Pack poskytuje velkou část rozhraní .NET Framework API pro .NET a poskytuje se prostřednictvím balíčku NuGet Microsoft.Windows.Compatibility.
Další informace naleznete v tématu Použití sady Windows Compatibility Pack k portování kódu do rozhraní .NET.
Režim kompatibility rozhraní .NET Framework
Režim kompatibility rozhraní .NET Framework byl zaveden v .NET Standard 2.0. Režim kompatibility umožňuje projektům .NET Standard a .NET odkazovat na knihovny rozhraní .NET Framework, jako by byly zkompilovány pro cílovou architekturu projektu. Některé implementace .NET však můžou podporovat větší blok .NET Frameworku než jiné. Například .NET Core 3.0 rozšiřuje režim kompatibility rozhraní .NET Framework na Windows Forms a WPF. Odkazování na knihovny rozhraní .NET Framework nefunguje pro všechny projekty, například pokud knihovna používá rozhraní WPF API, ale odblokuje mnoho scénářů přenosu. Další informace najdete v tématu Analýza závislostí pro kód portu z rozhraní .NET Framework do .NET.
Odkazování na knihovny rozhraní .NET Framework nefunguje ve všech případech, protože závisí na tom, která rozhraní API rozhraní .NET Framework byla použita a zda jsou tato rozhraní API podporovaná cílovou architekturou projektu. Některá rozhraní API z .NET Framework budou fungovat pouze na Windows. Režim kompatibility rozhraní .NET Framework odblokuje mnoho scénářů přenosu, ale měli byste otestovat projekty, abyste zajistili, že budou fungovat i za běhu. Další informace najdete v tématu Analýza závislostí pro portování kódu z rozhraní .NET Framework do.
Změny cílové architektury v projektech ve stylu sady SDK
Jak jsme už zmínili, soubory projektu pro .NET používají jiný formát než .NET Framework, označovaný jako formát projektu ve stylu sady SDK. I když nepřesouváte rozhraní .NET Framework na .NET, měli byste soubor projektu upgradovat na nejnovější formát. Způsob určení cílové architektury se v projektech ve stylu sady SDK liší. V rozhraní .NET Framework se <TargetFrameworkVersion>
vlastnost používá s monikerem, který určuje verzi rozhraní .NET Framework. Například rozhraní .NET Framework 4.7.2 vypadá jako následující fragment kódu:
<PropertyGroup>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
</PropertyGroup>
Projekt ve stylu sady SDK používá jinou vlastnost k identifikaci cílové architektury, <TargetFramework>
vlastnosti. Při cílení na .NET Framework začíná moniker s net
a končí verzí rozhraní .NET Framework bez teček. Například moniker pro cílení rozhraní .NET Framework 4.7.2 je net472
:
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
Pro seznam všech cílových označení, viz Target frameworks in projektech stylu SDK.
Nedostupné technologie
V rozhraní .NET Framework existuje několik technologií, které v .NET neexistují:
-
Vytváření dalších domén aplikace se nepodporuje. Pro izolaci kódu použijte jako alternativu samostatné procesy nebo kontejnery.
-
Remoting se používá pro komunikaci napříč aplikačními doménami, které již nejsou podporovány. Pro jednoduchou komunikaci mezi procesy zvažte mechanismy komunikace mezi procesy (IPC) jako alternativu ke vzdálené komunikaci, jako je třída System.IO.Pipes nebo třída MemoryMappedFile. V případě složitějších scénářů zvažte architektury, jako je StreamJsonRpc nebo ASP.NET Core (buď pomocí služeb gRPC nebo RESTful Web API).
Vzhledem k tomu, že vzdálená komunikace není podporována, volání metod
BeginInvoke()
aEndInvoke()
na objekty delegáta vyvolají výjimkuPlatformNotSupportedException
. Zabezpečení přístupu kódu (CAS)
CAS byla technika sandboxu podporovaná rozhraním .NET Framework, ale v rozhraní .NET Framework 4.0 je zastaralá. Nahradila ho transparentnost zabezpečení a v .NET se nepodporuje. Místo toho použijte hranice zabezpečení poskytované operačním systémem, jako je virtualizace, kontejnery nebo uživatelské účty.
-
Podobně jako u CAS se technika sandboxingu pro zabezpečení prostřednictvím transparentnosti už nedoporučuje pro aplikace rozhraní .NET Framework a není podporována v .NET. Místo toho použijte hranice zabezpečení poskytované operačním systémem, jako je virtualizace, kontejnery nebo uživatelské účty.
-
System.EnterpriseServices (COM+) se v .NET nepodporuje.
Windows Workflow Foundation (WF)
WF není v .NET podporováno. Podívejte se na alternativu v CoreWF.
Další informace o těchto nepodporovaných technologiích naleznete v tématu Technologie rozhraní .NET Framework nedostupné v .NET 6 nebo novější.
Multiplatformní
.NET (dříve označované jako .NET Core) je navržený tak, aby byl multiplatformní. Pokud váš kód nezávisí na technologiích specifických pro Windows, může běžet na jiných platformách, jako je macOS, Linux a Android. Takový kód zahrnuje typy projektů, jako jsou:
- Knihovny
- Nástroje založené na konzole
- Automatizace
- weby ASP.NET
.NET Framework je komponenta jen pro Windows. Pokud váš kód používá technologie nebo rozhraní API specifické pro Windows, jako jsou Windows Forms a WPF, může kód běžet i v .NET, ale nespouští se v jiných operačních systémech.
Je možné, že se vaše knihovna nebo konzolová aplikace dají používat napříč platformami, aniž byste se museli moc měnit. Při přenosu na .NET je vhodné vzít v úvahu tuto možnost a otestovat aplikaci na jiných platformách.
Budoucnost rozhraní .NET Standard
.NET Standard je formální specifikace rozhraní .NET API, která jsou k dispozici v několika implementacích .NET. Motivací za rozhraním .NET Standard bylo vytvořit větší jednotnost v ekosystému .NET. Od .NET 5 byl přijat jiný přístup k vytvoření jednotnosti a tento nový přístup eliminuje potřebu .NET Standard v mnoha scénářích. Další informace najdete v tématech .NET 5+ a .NET Standard.
.NET Standard 2.0 byla poslední verzí pro podporu rozhraní .NET Framework.
Nástroje pro usnadnění přenosu
Místo ručního přenosu aplikace z rozhraní .NET Framework do .NET můžete použít různé nástroje, které vám pomůžou automatizovat některé aspekty migrace. Přenos komplexního projektu je sám o sobě složitý proces. Nástroje vám můžou pomoct v této cestě.
I když k přenosu aplikace používáte nástroj, měli byste se podívat na aspekty při přenosu v tomto článku.
Pomocník pro upgrade platformy .NET
Pomocník pro upgrade .NET je nástroj příkazového řádku, který lze spustit na různých typech aplikací rozhraní .NET Framework. Je navržená tak, aby pomohla s upgradem aplikací .NET Framework na .NET. Po spuštění nástroje bude aplikace ve většině případů vyžadovat větší úsilí k dokončení migrace. Tento nástroj zahrnuje instalaci analyzátorů, které vám pomůžou s dokončením migrace. Tento nástroj funguje na následujících typech aplikací rozhraní .NET Framework:
- Windows Forms
- WPF (Windows Presentation Foundation)
- ASP.NET MVC
- Konzole
- Knihovny tříd
Tento nástroj používá další nástroje uvedené v tomto článku, například try-convert, a provede proces migrace. Další informace o nástroji naleznete v tématu Přehled pomocníka pro upgrade platformy .NET.
try-convert
Tento try-convert
nástroj je globální nástroj .NET, který může převést projekt nebo celé řešení na sadu .NET SDK, včetně přesunu desktopových aplikací do .NET. Tento nástroj se ale nedoporučuje, pokud má váš projekt složitý proces sestavení, jako jsou vlastní úkoly, cíle nebo importy.
Další informace najdete v try-convert
úložišti GitHub.
Analyzátor kompatibility platformy
Analyzátor kompatibility platformy analyzuje, jestli používáte rozhraní API, které PlatformNotSupportedException vyvolává za běhu. I když je nepravděpodobné, že narazíte na některá z těchto rozhraní API, pokud přecházíte z .NET Framework 4.7.2 nebo vyšší, je dobré to zkontrolovat. Pro více informací o rozhraních API, která vyvolávají výjimky v .NET, viz Rozhraní API, která vždy vyvolávají výjimky na .NET Core.
Další informace najdete v tématu Analyzátor kompatibility platformy.
Důležité informace o přenosu
Při přenosu aplikace do .NET zvažte následující návrhy:
✔️ Zvažte migraci projektů pomocí Pomocníka pro upgrade platformy .NET . I když je tento nástroj ve verzi Preview, automatizuje většinu ručních kroků popsaných v tomto článku a poskytuje skvělý výchozí bod pro pokračování v cestě migrace.
✔️ Nejprve zvažte prozkoumání závislostí. Vaše závislosti musí cílit na .NET, .NET Standard nebo .NET Core.
✔️ Proveďte migraci ze souboru packages.config NuGet do PackageReference nastavení v souboru projektu. K převodu package.config souboru použijte Visual Studio.
✔️ Zvažte upgrade na nejnovější formát souboru projektu, i když aplikaci ještě nemůžete přenést. Projekty rozhraní .NET Framework používají zastaralý formát projektu. I když byl nejnovější formát projektu, známý jako projekty ve stylu SDK, vytvořen pro .NET Core a dále, funguje také s rozhraním .NET Framework. Mít soubor projektu v nejnovějším formátu vám poskytne dobrý základ pro přenos aplikace v budoucnu.
✔️ Proveďte retarget projektu rozhraní .NET Framework na alespoň rozhraní .NET Framework 4.7.2. Tím zajistíte dostupnost nejnovějších alternativ rozhraní API pro případy, kdy .NET Standard nepodporuje existující rozhraní API.
✔️ Zvažte zaměření na .NET 8, což je verze s dlouhodobou podporou (LTS).
✔️ Zaměřte se na .NET 6+ pro projekty Windows Forms a WPF. .NET 6 a novější verze obsahují mnoho vylepšení desktopových aplikací.
✔️ Zvažte cílení na .NET Standard 2.0, pokud migrujete knihovnu, která se může používat i s projekty rozhraní .NET Framework. Můžete svou knihovnu cílit zároveň na rozhraní .NET Framework a .NET Standard.
✔️ Přidejte odkaz na balíček NuGet Microsoft.Windows.Compatibility , pokud po migraci dojde k chybám chybějících rozhraní API. Velká část povrchu rozhraní API rozhraní .NET Framework je k dispozici pro .NET prostřednictvím balíčku NuGet.