Sdílet prostřednictvím


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

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:

  1. Klikněte pravým tlačítkem na projekt StarVoteControl v okně Průzkumník řešení a vyberte: Upgrade

    položka upgradu v Nástroji pro upgrade .NET v sadě Visual Studio.

    Otevře se nová karta s výzvou k výběru způsobu provedení upgradu.

  2. Vyberte místní upgrade projektu.

  3. 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ší.

  4. 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:

    Karta výsledků asistentu upgradu .NET, která ukazuje, že 7 z 21 položek bylo přeskočeno.

    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:

  1. V okně Průzkumník řešení klikněte pravým tlačítkem na projekt WebSiteRatings a vyberte Upgrade:
  2. Jako režim upgradu vyberte místní upgrade projektu.
  3. Vyberte .NET 8.0 pro cílovou architekturu a vyberte Další.
  4. 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.

  1. Klikněte pravým tlačítkem na projekt WebSiteRatings v okně Průzkumník řešení a vyberte Vyčistit.
  2. 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 NuGet SQLite, ale 8.0.x odebere danou závislost. Projekt stále odkazuje na balíček SQLite NuGet, i když už ho nepotřebujete. z projektu je možné odebrat balíčky NuGet SQLite i SQLite.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 NuGet System.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:

  1. Přidejte balíček NuGet Microsoft.Web.WebView2.

  2. V souboru MainWindow.xaml:

    1. 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">
      
    2. Tam, kde je deklarován prvek <Border>, odeberte ovládací prvek WebBrowser a nahraďte ho ovládacím prvkem 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>
      
  3. Upravte kód MainWindow.xaml.cs za souborem. Aktualizujte metodu ListBox_SelectionChanged tak, aby nastavila vlastnost browser.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žaduje 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>");
    }
    

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.

  1. Odeberte balíček NuGet System.Configuration.ConfigurationManager.

  2. Přidejte balíček NuGet Microsoft.Extensions.Configuration.Json.

  3. Přidejte soubor do projektu s názvem appsettings.json.

  4. 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 Vlastnosti po 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>
    
  5. 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;"
      }
    }
    
  6. 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();
            }
        }
    }
    
  7. V souboru .\Models\Database.cs změňte metodu OpenConnection tak, aby používala novou vlastnost App.Config. To vyžaduje import jmenného prostoru Microsoft.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.