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, což je technologie pro více platforem, WPF je stále pouze 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 prozkoumání článku Rozdíly s WPF .NET a průvodce Portování z .NET Framework na .NET.
Požadavky
- Operační systém Windows
- sadě 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 s upgradem na .NET pro Visual Studio
Ukázková aplikace
Tento článek byl napsán v kontextu upgradu projektu Web Favorites Sample, který si můžete stáhnout z úložiště .NET Samples Na GitHubu.
Zahajte upgrade
Pokud upgradujete více projektů, začněte projekty, které nemají žádné závislosti. V ukázce oblíbených webů závisí projekt WebSiteRatings na knihovně StarVoteControl, takže StarVoteControl je potřeba nejprve upgradovat.
Rada
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:
Klikněte pravým tlačítkem na projekt
StarVoteControl v okněPrůzkumník řešení a vyberte:Upgrade 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. rozhraní .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 položky Upgrade selection spusť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. Přeskočené součásti znamenají, že asistent upgradu nic nenalezl k aktualizaci.
Teď, když je upgradovaná podpůrná knihovna aplikace, upgradujte hlavní aplikaci.
Aktualizovat aplikaci
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 vyberteUpgrade : - Jako režim upgradu vyberte místní upgrade projektu.
- Vyberte .NET 8.0 pro cílovou architekturu a vyberte Další.
- Ponechte všechny vybrané artefakty a vyberte Aktualizovat výběr.
Po dokončení upgradu se zobrazí výsledky. Pokud má položka symbol upozornění, znamená to, že je tu poznámka, kterou si můžete přečíst rozbalením položky.
Vygenerujte čisté sestavení
Po upgradu projektu ho vyčistěte a zkompilujte.
- Klikněte pravým tlačítkem na projekt WebSiteRatings v okně Průzkumník řešení a vyberte Vyčistit.
- Klikněte pravým tlačítkem na projekt WebSiteRatings v okně Průzkumníka řešení a vyberte Sestavit.
Pokud vaše aplikace zjistila nějaké chyby, najdete je 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 článku Modernizace po upgradu na .NET z rozhraní .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 se balíček NuGet
Microsoft.Data.Sqlite
upgradoval z 1.0.0 na 8.0.x. Ale 1.0.0 závisí na balíčku NuGetSQLite
, ale 8.0.x odebere danou závislost. Projekt stále odkazuje na balíčekSQLite
NuGet, i když už ho nepotřebujete. z projektu je možné odebrat balíčky NuGetSQLite
iSQLite.Native
.Vyčistěte staré balíčky NuGet.
Soubor packages.config už není potřeba a můžete ho z projektu odstranit, protože odkazy na balíčky NuGet jsou teď deklarovány v souboru projektu. Kromě toho místní složka mezipaměti balíčku NuGet s názvem Packages, je buď ve složce, nebo v 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 dostupné 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íčkem NuGetSystem.Configuration.ConfigurationManager
. 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.
Modernizovat: Ovládací prvek webového prohlížeče
Ovládací prvek WebBrowser odkazovaný ukázkovou aplikací 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ý ovládací prvek webového prohlížeče WebView2:
Přidejte balíček NuGet
Microsoft.Web.WebView2
.V souboru MainWindow.xaml:
Importujte ovládací prvek do oboru názvů wpfControls na kořenovém prvku:
<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">
Tam, kde je deklarován prvek
<Border>
, odeberte ovládací prvekWebBrowser
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
tak, aby nastavila vlastnostbrowser.Source
na platnou Uri. Tento kód byl dříve předán v adrese URL webu jako řetězec, ale ovládací prvek WebView2 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
Rozhraní .NET Framework používá soubor App.config k načtení nastavení pro vaši aplikaci, jako jsou připojovací řetězce a poskytovatelé protokolování. .NET teď pro nastavení aplikace používá soubor appsettings.json.
App.config soubory jsou podporovány v .NET prostřednictvím balíčku System.Configuration.ConfigurationManager
NuGet a podpora appsettings.json je poskytována balíčkem NuGet Microsoft.Extensions.Configuration
.
Vzhledem k tomu, že ostatní knihovny upgradují na .NET, modernizují díky podpoře 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 vyhýbat používání App.config, kde to jde.
Použijte appsettings.json s ukázkovou aplikací WPF
Například po upgradu ukázkové aplikace WPF použijte appsettings.json pro připojovací řetězec k místní databázi.
Odeberte balíček NuGet
System.Configuration.ConfigurationManager
.Přidejte balíček NuGet
Microsoft.Extensions.Configuration.Json
.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.
Nastavte kopírování
na výstup ve Visual Studiu pomocí okna Vlastnostipo výběru souboru v Průzkumníku řešení . 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 app.config obsahoval pouze 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 soubor appsettings.json, přidané řádky jsou 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 novou vlastnostApp.Config
. To vyžaduje import jmenného prostoruMicrosoft.Extensions.Configuration
.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 metoda rozšíření poskytovaná oborem názvůMicrosoft.Extensions.Configuration
.
.NET Desktop feedback