Postup upgradu desktopové aplikace WPF na .NET 8
Tento článek popisuje, jak upgradovat desktopovou aplikaci WPF (Windows Presentation Foundation) na .NET 8. I když WPF běží na .NET, technologie pro různé platformy, WPF je stále jen pro Windows. Následující typy projektů související s WPF je možné upgradovat pomocí Pomocníka pro upgrade platformy .NET:
- Projekt WPF
- Knihovna ovládacích prvků
- Knihovna .NET
Pokud upgradujete z rozhraní .NET Framework na .NET, zvažte informace o rozdílech v článku WPF .NET a o přenosu z rozhraní .NET Framework na .NET příručku.
Požadavky
- Operační systém Windows
- Visual Studio 2022 verze 17.7 nebo novější pro cílení na .NET 8
- Visual Studio 2022 verze 17.1 nebo novější pro cílení na .NET 7
- Rozšíření Pomocník pro upgrade platformy .NET pro Visual Studio
Ukázková aplikace
Tento článek byl napsán v kontextu upgradu ukázkového projektu Web Favorites, který si můžete stáhnout z úložiště GitHub s ukázkami .NET.
Zahájení upgradu
Pokud upgradujete více projektů, začněte projekty, které nemají žádné závislosti. V ukázce Webových oblíbených položek závisí projekt WebSiteRatings na knihovně StarVoteControl , takže je třeba nejprve upgradovat StarVoteControl .
Tip
Nezapomeňte mít zálohu kódu, například ve správě zdrojového kódu nebo kopii.
Pomocí následujících kroků upgradujte projekt v sadě Visual Studio:
V okně Průzkumník řešení klikněte pravým tlačítkem na projekt StarVoteControl a vyberte Upgradovat:
Otevře se nová karta s výzvou k výběru způsobu provedení upgradu.
Vyberte místní upgrade projektu.
Dále vyberte cílovou architekturu. Na základě typu projektu, který upgradujete, se zobrazí různé možnosti. .NET Standard 2.0 je dobrou volbou, pokud knihovna nespoléhá na desktopovou technologii, jako je WPF, a může ji používat projekty rozhraní .NET Framework i projekty .NET. Nejnovější verze .NET však poskytují mnoho vylepšení jazyka a kompilátoru oproti .NET Standard.
Vyberte .NET 8.0 a pak vyberte Další.
Zobrazí se strom se všemi artefakty souvisejícími s projektem, jako jsou soubory kódu a knihovny. Můžete upgradovat jednotlivé artefakty nebo celý projekt, což je výchozí nastavení. Výběrem možnosti Upgradovat spustíte upgrade.
Po dokončení upgradu se zobrazí výsledky:
Artefakty s plným zeleným kruhem byly upgradovány, zatímco prázdné zelené kruhy byly vynechány. Vynechané artefakty znamenají, že pomocník s upgradem nic nenalezl.
Teď, když je upgradovaná podpůrná knihovna aplikace, upgradujte hlavní aplikaci.
Upgrade aplikace
Po upgradu všech podpůrných knihoven je možné upgradovat hlavní projekt aplikace. Proveďte následující kroky:
- V okně Průzkumník řešení klikněte pravým tlačítkem na projekt WebSiteRatings a vyberte Upgradovat:
- Jako režim upgradu vyberte místní upgrade projektu.
- Jako cílovou architekturu vyberte .NET 8.0 a vyberte Další.
- Ponechte všechny vybrané artefakty a vyberte Upgradovat výběr.
Po dokončení upgradu se zobrazí výsledky. Pokud má položka symbol upozornění, znamená to, že máte poznámku, kterou můžete udělat rozbalením položky.
Vygenerování čistého sestavení
Po upgradu projektu ho vyčistěte a zkompilujte.
- V okně Průzkumník řešení klikněte pravým tlačítkem myši na projekt WebSiteRatings a vyberte Vyčistit.
- V okně Průzkumník řešení klikněte pravým tlačítkem myši na projekt WebSiteRatings a vyberte Sestavit.
Pokud vaše aplikace zjistila nějaké chyby, můžete je najít v okně Seznam chyb s doporučením, jak je opravit.
Kroky po upgradu
Pokud se váš projekt upgraduje z rozhraní .NET Framework na .NET, přečtěte si informace v části Modernizace po upgradu na .NET z článku .NET Framework .
Po upgradu budete chtít:
Zkontrolujte balíčky NuGet.
Pomocník s upgradem .NET upgradoval některé balíčky na nové verze. S ukázkovou aplikací uvedenou v tomto článku
Microsoft.Data.Sqlite
se balíček NuGet upgradoval z verze 1.0.0 na 8.0.x. Verze 1.0.0 však závisí naSQLite
balíčku NuGet, ale verze 8.0.x odebere danou závislost. NaSQLite
balíček NuGet stále odkazuje projekt, i když už se nevyžaduje.SQLite
Z projektu je možné odebrat balíčky NuGet iSQLite.Native
balíčky NuGet.Vyčistěte staré balíčky NuGet.
Soubor packages.config již není vyžadován a lze jej odstranit z projektu, protože odkazy na balíčky NuGet jsou nyní deklarovány v souboru projektu. Místní složka mezipaměti balíčků NuGet s názvem Packages je navíc ve složce nebo nadřazené složce projektu. Tuto složku místní mezipaměti je možné odstranit. Nové odkazy na balíčky NuGet používají globální složku mezipaměti pro balíčky, které jsou k dispozici v adresáři profilu uživatele s názvem .nuget\packages.
Odeberte knihovnu
System.Configuration
.Většina aplikací .NET Framework odkazuje na knihovnu
System.Configuration
. Po upgradu je možné, že se na tuto knihovnu stále odkazuje přímo.Knihovna
System.Configuration
pomocí souboru app.config poskytuje vaší aplikaci možnosti konfigurace za běhu. Pro .NET byla tato knihovna nahrazena balíčkemSystem.Configuration.ConfigurationManager
NuGet. Odeberte odkaz na knihovnu a přidejte do projektu balíček NuGet.Zkontrolujte, kde můžete aplikaci modernizovat.
Od vydání rozhraní .NET se rozhraní API a knihovny trochu změnily. Ve většině případů nemá rozhraní .NET Framework přístup k těmto vylepšením. Upgradem na .NET teď máte přístup k modernějším knihovnám.
Další části popisují oblasti, které modernizujete ukázkovou aplikaci používanou v tomto článku.
Modernizace: Ovládací prvek webového prohlížeče
Ovládací WebBrowser prvek, na který odkazuje ukázková aplikace WPF, je založený na Internet Exploreru, který je zastaralý. WPF pro .NET může používat ovládací prvek WebView2 založený na Microsoft Edgi. Provedením následujících kroků upgradujte na nový WebView2 ovládací prvek webového prohlížeče:
Microsoft.Web.WebView2
Přidejte balíček NuGet.V souboru MainWindow.xaml:
Importujte ovládací prvek do oboru názvů wpfControls v kořenovém elementu:
<mah:MetroWindow x:Class="WebSiteRatings.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mah="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" xmlns:local="clr-namespace:WebSiteRatings" xmlns:vm="clr-namespace:WebSiteRatings.ViewModels" xmlns:VoteControl="clr-namespace:StarVoteControl;assembly=StarVoteControl" xmlns:wpfControls="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf" Loaded="MetroWindow_Loaded" mc:Ignorable="d" Title="My Sites" Height="650" Width="1000">
Dolů, kde
<Border>
je prvek deklarován, odeberteWebBrowser
ovládací prvek a nahraďte ho ovládacím prvkemwpfControls:WebView2
:<Border Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="Black" Margin="5"> <wpfControls:WebView2 x:Name="browser" ScrollViewer.CanContentScroll="True" /> </Border>
Upravte kód MainWindow.xaml.cs za souborem. Aktualizujte metodu
ListBox_SelectionChanged
, aby byla vlastnost nastavenabrowser.Source
na platnou Uri. Tento kód byl dříve předán v adrese URL webu jako řetězec, ale WebView2 ovládací prvek vyžadujeUri
.private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { var siteCollection = (ViewModels.SiteCollection)DataContext; if (siteCollection.SelectedSite != null) browser.Source = new Uri(siteCollection.SelectedSite.Url); else browser.NavigateToString("<body></body>"); }
V závislosti na tom, jakou verzi Windows uživatel vaší aplikace používá, může být nutné nainstalovat modul runtime WebView2. Další informace naleznete v tématu Začínáme s WebView2 v aplikacích WPF.
Modernizace: appsettings.json
.NET Framework používá soubor App.config k načtení nastavení pro vaši aplikaci, jako jsou připojovací řetězec a zprostředkovatelé protokolování. .NET teď pro nastavení aplikace používá soubor appsettings.json . Soubory App.config jsou podporovány v .NET prostřednictvím System.Configuration.ConfigurationManager
balíčku NuGet a podpora appsettings.json je poskytována Microsoft.Extensions.Configuration
balíčkem NuGet.
Vzhledem k tomu, že ostatní knihovny upgradují na .NET, modernizují se podporou appsettings.json místo App.config. Například zprostředkovatelé protokolování v rozhraní .NET Framework, které byly upgradovány pro .NET 6 nebo novější, už pro nastavení nepoužívají App.config . Je dobré postupovat podle jejich směru a také se odejít z app.config , kde můžete.
Použití appsettings.json s ukázkovou aplikací WPF
Například po upgradu ukázkové aplikace WPF použijte appsettings.json pro připojovací řetězec do místní databáze.
System.Configuration.ConfigurationManager
Odeberte balíček NuGet.Microsoft.Extensions.Configuration.Json
Přidejte balíček NuGet.Přidejte soubor do projektu s názvem appsettings.json.
Nastavte soubor appsettings.json tak, aby se zkopíroval do výstupního adresáře.
Po výběru souboru v Průzkumník řešení nastavte nastavení kopírování na výstup prostřednictvím sady Visual Studio pomocí okna Vlastnosti. Případně můžete projekt upravit přímo a přidat následující
ItemGroup
:<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
Migrujte nastavení v souboru App.config do nového souboru appsettings.json .
V ukázkové aplikaci WPF obsahovala app.config jenom jeden připojovací řetězec. Upravte soubor appsettings.json a definujte připojovací řetězec:
{ "ConnectionStrings": { "database": "DataSource=sqlite.db;" } }
Upravte soubor App.xaml.cs a vytvořte instanci objektu konfigurace, který načte appsettings.json soubor, jsou přidané řádky zvýrazněné:
using System.Windows; using Microsoft.Extensions.Configuration; namespace WebSiteRatings { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { public static IConfiguration Config { get; private set; } public App() { Config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); } } }
V souboru .\Models\Database.cs změňte metodu
OpenConnection
tak, aby používala novouApp.Config
vlastnost. To vyžaduje importMicrosoft.Extensions.Configuration
oboru názvů:using Microsoft.Data.Sqlite; using System.Collections.Generic; using Microsoft.Extensions.Configuration; namespace WebSiteRatings.Models { internal class Database { public static SqliteConnection OpenConnection() => new SqliteConnection(App.Config.GetConnectionString("database")); public static IEnumerable<Site> ReadSites()
GetConnectionString
je rozšiřující metoda poskytovaná oboremMicrosoft.Extensions.Configuration
názvů.
.NET Desktop feedback