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 języka .NET
Jeśli przeprowadzasz uaktualnienie z programu .NET Framework do platformy .NET, zapoznaj się z artykułem Różnice w platformie .NET platformy WPF i przewodnikiem Przenoszenie z programu .NET Framework do platformy .NET .
Wymagania wstępne
- System operacyjny Windows
- Program Visual Studio 2022 w wersji 17.7 lub nowszej przeznaczony dla platformy .NET 8
- Program Visual Studio 2022 w wersji 17.1 lub nowszej przeznaczony dla platformy .NET 7
- Rozszerzenie Asystenta uaktualniania platformy .NET dla programu Visual Studio
Pokazowa aplikacja
Ten artykuł został napisany w kontekście uaktualniania przykładowego projektu Web Favorites Sample , który można pobrać z repozytorium GitHub przykłady platformy .NET.
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, więc najpierw należy uaktualnić element StarVoteControl.
Napiwek
Upewnij się, że masz kopię zapasową kodu, na przykład w kontroli źródła lub kopii.
Wykonaj następujące kroki, aby uaktualnić projekt w programie Visual Studio:
Kliknij prawym przyciskiem myszy projekt StarVoteControl w oknie Eksplorator rozwiązań i wybierz polecenie Uaktualnij:
Zostanie otwarta nowa karta z monitem o wybranie sposobu wykonania uaktualnienia.
Wybierz pozycję Uaktualnienie projektu w miejscu.
Następnie wybierz platformę docelową. W zależności od typu uaktualnianego projektu prezentowane są różne opcje. Platforma .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 platformy .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 pozycję Uaktualnij wybór , aby rozpocząć uaktualnianie.
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 Eksplorator rozwiązań i wybierz pozycję Uaktualnij:
- Wybierz pozycję Uaktualnienie projektu w miejscu jako tryb uaktualniania.
- Wybierz pozycję .NET 8.0 dla platformy docelowej, a następnie wybierz pozycję Dalej.
- Pozostaw zaznaczone wszystkie artefakty i wybierz pozycję Uaktualnij.
Po zakończeniu uaktualniania zostaną wyświetlone wyniki. Jeśli element ma symbol ostrzeżenia, oznacza to, że istnieje notatka do odczytania, którą można zrobić, rozwijając element.
Generowanie czystej kompilacji
Po uaktualnieniu projektu wyczyść go i skompiluj.
- Kliknij prawym przyciskiem myszy projekt WebSiteRatings w oknie Eksplorator rozwiązań i wybierz polecenie Wyczyść.
- Kliknij prawym przyciskiem myszy projekt WebSiteRatings w oknie Eksplorator rozwiązań i wybierz pozycję Kompiluj.
Jeśli aplikacja napotkała jakiekolwiek błędy, możesz je znaleźć w oknie Lista 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 temacie Modernize po uaktualnieniu do platformy .NET z programu .NET Framework .
Po uaktualnieniu należy wykonać następujące elementy:
Sprawdź pakiety NuGet.
Asystent uaktualniania platformy .NET uaktualnił niektóre pakiety do nowych wersji. W przypadku przykładowej aplikacji podanej w tym artykule
Microsoft.Data.Sqlite
pakiet NuGet został uaktualniony z wersji 1.0.0 do 8.0.x. Jednak 1.0.0 zależySQLite
od pakietu NuGet, ale 8.0.x usuwa tę zależność. PakietSQLite
NuGet nadal odwołuje się do projektu, chociaż nie jest już wymagany.SQLite
Pakiety iSQLite.Native
NuGet 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 lokalny folder pamięci podręcznej pakietów NuGet o nazwie Packages znajduje się w folderze lub folderze nadrzędnym projektu. 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
System.Configuration
biblioteki. 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 czasu wykonywania aplikacji. W przypadku platformy .NET ta biblioteka została zastąpiona pakietemSystem.Configuration.ConfigurationManager
NuGet. 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.
Modernizowanie: kontrolka 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. Wykonaj następujące kroki, aby uaktualnić do nowej WebView2 kontrolki przeglądarki internetowej:
Microsoft.Web.WebView2
Dodaj pakiet NuGet.W pliku MainWindow.xaml:
Zaimportuj kontrolkę do przestrzeni nazw wpfControls w elemercie 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ół,
<Border>
gdzie element jest zadeklarowany, 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ćbrowser.Source
właściwość na prawidłową Uriwartość . Ten kod wcześniej przekazany w adresie URL witryny internetowej jako ciąg, ale kontrolka WebView2 wymaga .Uri
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 Get started with WebView2 in WPF apps (Wprowadzenie do aplikacji 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 System.Configuration.ConfigurationManager
pakietu NuGet, a obsługa appsettings.json jest zapewniana przez Microsoft.Extensions.Configuration
pakiet NuGet.
W miarę uaktualniania innych bibliotek do platformy .NET modernizują się, obsługując appsettings.json zamiast App.config. Na przykład dostawcy rejestrowania w programie .NET Framework uaktualnionym dla platformy .NET 6+ nie używają już pliku App.config dla ustawień. Warto postępować zgodnie z ich kierunkiem, a także odejść od korzystania z pliku App.config , gdzie można.
Używanie appsettings.json z przykładową aplikacją WPF
Na przykład po uaktualnieniu przykładowej aplikacji WPF użyj appsettings.json dla parametry połączenia lokalnej bazy danych.
System.Configuration.ConfigurationManager
Usuń pakiet NuGet.Microsoft.Extensions.Configuration.Json
Dodaj pakiet 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 Eksplorator rozwiązań. Alternatywnie możesz edytować projekt bezpośrednio i dodać następujący
ItemGroup
kod:<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 plik app.config zawierał tylko jeden parametry połączenia. Edytuj plik appsettings.json, aby zdefiniować parametry połączenia:
{ "ConnectionStrings": { "database": "DataSource=sqlite.db;" } }
Edytuj plik App.xaml.cs, instancing obiektu konfiguracji, który ładuje plik appsettings.json, 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ć nowejApp.Config
właściwości. Wymaga to zaimportowaniaMicrosoft.Extensions.Configuration
przestrzeni nazw: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 przezMicrosoft.Extensions.Configuration
przestrzeń nazw.
.NET Desktop feedback