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

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:

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

    The .NET Upgrade Assistant's Upgrade menu item in 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. .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 možnosti Upgradovat spustíte upgrade.

    Po dokončení upgradu se zobrazí výsledky:

    The .NET Upgrade Assistant's upgrade results tab, showing 7 out of the 21 items were skipped.

    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:

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

  1. V okně Průzkumník řešení klikněte pravým tlačítkem myši na projekt WebSiteRatings a vyberte Vyčistit.
  2. 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í na SQLite balíčku NuGet, ale verze 8.0.x odebere danou závislost. Na SQLite balíček NuGet stále odkazuje projekt, i když už se nevyžaduje. SQLite Z projektu je možné odebrat balíčky NuGet i SQLite.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íčkem System.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:

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

  2. V souboru MainWindow.xaml:

    1. 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">
      
    2. Dolů, kde <Border> je prvek deklarován, odeberte WebBrowser ovládací prvek 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 , aby byla vlastnost nastavena browser.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ž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

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

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

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

  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.

    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>
    
  5. 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;"
      }
    }
    
  6. 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();
            }
        }
    }
    
  7. V souboru .\Models\Database.cs změňte metodu OpenConnection tak, aby používala novou App.Config vlastnost. To vyžaduje import Microsoft.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á oborem Microsoft.Extensions.Configuration názvů.