Jak uaktualnić aplikację klasyczną WPF do platformy .NET 8
W tym artykule opisano sposób uaktualniania aplikacji klasycznej windows Presentation Foundation (WPF) do platformy .NET 8. Mimo że WPF działa na platformie .NET, technologia międzyplatformowa, WPF jest nadal strukturą tylko dla systemu Windows. Następujące typy projektów związanych z platformą WPF można uaktualnić za pomocą Asystenta uaktualniania platformy .NET:
- Projekt WPF
- Biblioteka kontrolek
- Biblioteka .NET
Jeśli przeprowadzasz uaktualnienie z programu .NET Framework do platformy .NET, zapoznaj się z artykułem
Warunki wstępne
- System operacyjny Windows
- programu Visual Studio 2022 w wersji 17.7 lub nowszej do platformy .NET 8
- Visual Studio 2022 w wersji 17.1 lub późniejszej do obsługi .NET 7
- rozszerzenie asystenta uaktualniania platformy .NET dla programu Visual Studio
Pokazowa aplikacja
Ten artykuł został napisany w kontekście uaktualniania projektu przykładowych ulubionych sieci Web
Inicjowanie uaktualnienia
Jeśli uaktualniasz wiele projektów, zacznij od projektów, które nie mają zależności. W przykładzie Web Favorites (Ulubione sieci Web) projekt WebSiteRatings zależy od biblioteki StarVoteControl, dlatego najpierw należy zaktualizować StarVoteControl.
Napiwek
Upewnij się, że masz kopię zapasową swojego kodu, na przykład w systemie kontroli wersji lub w osobnej kopii.
Wykonaj następujące kroki, aby uaktualnić projekt w programie Visual Studio:
Kliknij prawym przyciskiem myszy projekt StarVoteControl w oknie Eksploratora rozwiązań , a następnie wybierz pozycję Uaktualnij:
Zostanie otwarta nowa karta z monitem o wybranie sposobu wykonania uaktualnienia.
Wybierz uaktualnienie projektu na miejscu .
Następnie wybierz platformę docelową. W zależności od typu uaktualnianego projektu prezentowane są różne opcje. .NET Standard 2.0 jest dobrym wyborem, jeśli biblioteka nie korzysta z technologii klasycznej, takiej jak WPF, i może być używana zarówno przez projekty .NET Framework, jak i projekty .NET. Jednak najnowsze wersje platformy .NET zapewniają wiele ulepszeń języka i kompilatora za pośrednictwem platformy .NET Standard.
Wybierz pozycję .NET 8.0, a następnie wybierz pozycję Dalej.
Drzewo jest wyświetlane ze wszystkimi artefaktami powiązanymi z projektem, takimi jak pliki kodu i biblioteki. Możesz uaktualnić poszczególne artefakty lub cały projekt, który jest domyślny. Wybierz Opcję aktualizacji, aby rozpocząć aktualizację.
Po zakończeniu uaktualniania zostaną wyświetlone wyniki:
Artefakty z solidnym zielonym okręgiem zostały uaktualnione, podczas gdy pominięto puste zielone okręgi. Pominięte artefakty oznaczają, że asystent uaktualnienia nie znalazł niczego do uaktualnienia.
Po uaktualnieniu biblioteki pomocniczej aplikacji uaktualnij główną aplikację.
Uaktualnianie aplikacji
Po uaktualnieniu wszystkich bibliotek pomocniczych można uaktualnić główny projekt aplikacji. Wykonaj następujące kroki:
- Kliknij prawym przyciskiem myszy projekt WebSiteRatings w oknie Eksploratora Rozwiązań, a następnie wybierz pozycję Zaktualizuj:
- Wybierz Uaktualnienie projektu w miejscu jako tryb uaktualniania.
- Wybierz .NET 8.0 dla platformy docelowej i wybierz Dalej.
- Pozostaw zaznaczone wszystkie artefakty i wybierz pozycję Uaktualnij wybór.
Po zakończeniu uaktualniania zostaną wyświetlone wyniki. Jeśli element ma symbol ostrzeżenia, oznacza to, że jest notatka do przeczytania, którą można przeczytać, rozwijając element.
Generowanie czystej kompilacji
Po uaktualnieniu projektu wyczyść go i skompiluj.
- Kliknij prawym przyciskiem myszy projekt WebSiteRatings w Solution Explorer i wybierz pozycję Clean.
- Kliknij prawym przyciskiem myszy projekt
WebSiteRatings w oknie Eksplorator rozwiązańSolution Explorer i wybierz pozycję Build .
Jeśli aplikacja napotkała jakiekolwiek błędy, możesz je znaleźć w oknie listy błędów z zaleceniem, jak je naprawić.
Kroki po uaktualnieniu
Jeśli projekt jest uaktualniany z programu .NET Framework do platformy .NET, zapoznaj się z informacjami w artykule Modernize po uaktualnieniu do platformy .NET z programu .NET Framework.
Po uaktualnieniu warto zrobić następujące rzeczy:
Sprawdź pakiety NuGet.
Asystent uaktualniania platformy .NET uaktualnił niektóre pakiety do nowych wersji. W przykładowej aplikacji podanej w tym artykule pakiet NuGet
Microsoft.Data.Sqlite
został uaktualniony z 1.0.0 do 8.0.x. Jednak 1.0.0 zależy od pakietu NuGetSQLite
, ale 8.0.x usuwa tę zależność. Projekt nadal odwołuje się do pakietu NuGetSQLite
, chociaż nie jest już wymagany. Pakiety NuGetSQLite
iSQLite.Native
można usunąć z projektu.Wyczyść stare pakiety NuGet.
Plik packages.config nie jest już wymagany i można go usunąć z projektu, ponieważ odwołania do pakietu NuGet są teraz zadeklarowane w pliku projektu. Ponadto folder lokalnej pamięci podręcznej pakietów NuGet, nazwany Packages, znajduje się w folderze projektu lub w jego katalogu nadrzędnym. Ten lokalny folder pamięci podręcznej można usunąć. Nowe odwołania do pakietu NuGet używają globalnego folderu pamięci podręcznej dla pakietów dostępnych w katalogu profilu użytkownika o nazwie .nuget\packages.
Usuń bibliotekę
System.Configuration
.Większość aplikacji .NET Framework odwołuje się do biblioteki
System.Configuration
. Po uaktualnieniu istnieje możliwość, że ta biblioteka jest nadal bezpośrednio przywołyowana.Biblioteka
System.Configuration
używa pliku app.config do udostępniania opcji konfiguracji w czasie wykonywania aplikacji. W przypadku platformy .NET ta biblioteka została zastąpiona przez pakiet NuGetSystem.Configuration.ConfigurationManager
. Usuń odwołanie do biblioteki i dodaj pakiet NuGet do projektu.Sprawdź, czy nie ma miejsc do modernizacji aplikacji.
Interfejsy API i biblioteki uległy zmianie od czasu wydania platformy .NET. W większości przypadków program .NET Framework nie ma dostępu do tych ulepszeń. Dzięki uaktualnieniu do platformy .NET masz teraz dostęp do bardziej nowoczesnych bibliotek.
W następnych sekcjach opisano obszary modernizacji przykładowej aplikacji używanej w tym artykule.
Modernizacja: kontrola przeglądarki internetowej
Kontrolka WebBrowser, do której odwołuje się przykładowa aplikacja WPF, jest oparta na programie Internet Explorer, który jest nieaktualny. WPF dla platformy .NET może używać kontrolki WebView2 opartej na przeglądarce Microsoft Edge. Aby uaktualnić do nowej wersji kontrolki przeglądarki internetowej WebView2, wykonaj następujące kroki:
Dodaj pakiet
Microsoft.Web.WebView2
NuGet.W pliku MainWindow.xaml:
Zaimportuj kontrolkę do wpfControls przestrzeni nazw w elemencie głównym.
<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">
W dół, gdzie zadeklarowany jest element
<Border>
, usuń kontrolkęWebBrowser
i zastąp ją kontrolkąwpfControls: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>
Edytuj kod MainWindow.xaml.cs pliku. Zaktualizuj metodę
ListBox_SelectionChanged
, aby ustawić właściwośćbrowser.Source
na prawidłową Uri. Ten kod był przekazywany w formie ciągu znaków w adresie URL strony internetowej, ale kontrola WebView2 wymagaUri
.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>"); }
W zależności od wersji systemu Windows uruchomionej przez użytkownika aplikacji może być konieczne zainstalowanie środowiska uruchomieniowego WebView2. Aby uzyskać więcej informacji, zobacz Wprowadzenie do usługi WebView2 w aplikacjach WPF.
Modernizuj: appsettings.json
Program .NET Framework używa pliku App.config do ładowania ustawień aplikacji, takich jak parametry połączenia i dostawcy rejestrowania. Platforma .NET używa teraz pliku appsettings.json dla ustawień aplikacji. pliki App.config są obsługiwane na platformie .NET za pośrednictwem pakietu NuGet System.Configuration.ConfigurationManager
, a obsługa appsettings.json jest zapewniana przez pakiet NuGet Microsoft.Extensions.Configuration
.
W miarę aktualizacji innych bibliotek do platformy .NET, modernizują się wspierając appsettings.json zamiast App.config. Na przykład dostawcy rejestrowania w .NET Framework, uaktualnieni dla platformy .NET 6+, nie używają już App.config do ustawień. Dobrze jest postępować zgodnie z ich kierunkiem, a także odejść od korzystania z App.config, gdzie można.
Użyj appsettings.json z przykładową aplikacją WPF
Na przykład po uaktualnieniu przykładowej aplikacji WPF użyj appsettings.json dla parametrów połączenia z lokalną bazą danych.
Usuń pakiet
System.Configuration.ConfigurationManager
NuGet.Dodaj pakiet
Microsoft.Extensions.Configuration.Json
NuGet.Dodaj plik do projektu o nazwie appsettings.json.
Ustaw plik appsettings.json, aby skopiować go do katalogu wyjściowego.
Ustaw ustawienie kopiowania na dane wyjściowe za pomocą programu Visual Studio przy użyciu okna właściwości po wybraniu pliku w Eksploratorze rozwiązań . Alternatywnie możesz edytować projekt bezpośrednio i dodać następujący
ItemGroup
:<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
Przeprowadź migrację ustawień w pliku App.config do nowego pliku appsettings.json.
W przykładowej aplikacji WPF app.config zawierał tylko jeden parametr połączenia. Edytuj plik appsettings.json, aby zdefiniować parametry połączenia:
{ "ConnectionStrings": { "database": "DataSource=sqlite.db;" } }
Edytuj plik App.xaml.cs, tworząc obiekt konfiguracji, który ładuje plik appsettings.json, a dodane wiersze są wyróżnione.
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(); } } }
W pliku .\Models\Database.cs zmień metodę
OpenConnection
, aby użyć nowej właściwościApp.Config
. Wymaga to zaimportowania przestrzeni nazwMicrosoft.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
to metoda rozszerzenia dostarczana przez przestrzeń nazwMicrosoft.Extensions.Configuration
.
.NET Desktop feedback