Megosztás a következőn keresztül:


WPF asztali alkalmazás frissítése .NET 8-ra

Ez a cikk azt ismerteti, hogyan frissíthet asztali Windows Presentation Foundation (WPF) alkalmazásokat .NET 8-ra. Annak ellenére, hogy a WPF .NET-en, platformfüggetlen technológián fut, a WPF továbbra is csak Windows-keretrendszer. A .NET frissítési segédjével az alábbi WPF-projekttípusok frissíthetők:

  • WPF-projekt
  • Vezérlőkönyvtár
  • .NET-kódtár

Ha .NET-keretrendszerről .NET-re frissít, tekintse át a WPF .NET-keretrendszerrel kapcsolatos eltéréseket és a .NET-keretrendszerből a .NET-keretrendszerbe történő portolást ismertető cikket.

Előfeltételek

Bemutató alkalmazás

Ez a cikk a Webes kedvencek mintaprojekt frissítésének kontextusában készült, amelyet a .NET-minták GitHub-adattárából tölthet le.

A frissítés kezdeményezése

Ha több projektet frissít, kezdje olyan projektekkel, amelyek nem rendelkeznek függőségekkel. A Webes kedvencek mintában a WebSiteRatings projekt a StarVoteControl kódtártól függ, ezért először frissíteni kell a StarVoteControlt .

Jótanács

Mindenképpen készítsen biztonsági másolatot a kódról, például a forrásvezérlőben vagy egy másolatban.

Az alábbi lépésekkel frissíthet egy projektet a Visual Studióban:

  1. Kattintson a jobb gombbal a StarVoteControl projektre a Megoldáskezelő ablakban, és válassza a Frissítés lehetőséget:

    A .NET Upgrade Assistant Frissítés menüeleme a Visual Studióban.

    Ekkor megnyílik egy új lap, amely arra kéri, hogy válassza ki a frissítés végrehajtásának módját.

  2. Válassza a Helyszíni projektfrissítéslehetőséget.

  3. Ezután válassza ki a cél keretrendszert. A frissíteni kívánt projekt típusától függően különböző lehetőségek jelennek meg. A .NET Standard 2.0 jó választás, ha a kódtár nem támaszkodik asztali technológiára, például a WPF-re, és a .NET-keretrendszer projektjei és a .NET-projektek is használhatják. A legújabb .NET-kiadások azonban számos nyelvi és fordítói fejlesztést biztosítanak a .NET Standardhoz hasonlóan.

    Válassza a .NET 8.0 , majd a Tovább lehetőséget.

  4. Megjelenik egy fa a projekthez kapcsolódó összes összetevővel, például kódfájlokkal és kódtárakkal. Az egyes összetevőket vagy a teljes projektet frissítheti, ami az alapértelmezett. Válassza: Frissítés kiválasztása a frissítés elindításához.

    Ha a frissítés befejeződött, az eredmények megjelennek:

    A .NET frissítési segéd frissítési eredményeinek lapja, amelyen a 21 elem közül 7 kimaradt.

    A teljes zöld körrel rendelkező tárgyak frissültek, míg az üres zöld körrel rendelkező tárgyak kimaradtak. Az átugrott elemek azt jelentik, hogy a frissítési segéd nem talált frissítendő dolgokat.

Most, hogy az alkalmazás támogató könyvtára frissült, frissítse a fő alkalmazást.

Az alkalmazás frissítése

Az összes támogató kódtár frissítése után a fő alkalmazásprojekt frissíthető. Hajtsa végre a következő lépéseket:

  1. Kattintson a jobb gombbal a WebSiteRatings projektre a Megoldáskezelő ablakban, és válassza a Frissítés lehetőséget:
  2. Válassza a Helyszíni projektfrissítés lehetőséget frissítési módként.
  3. Válassza a .NET 8.0-t a cél-keretrendszerhez, és válassza a Tovább lehetőséget.
  4. Hagyja kijelölve az összes artefaktumot, és válassza a Frissítés kijelöléslehetőséget.

A frissítés befejezése után megjelennek az eredmények. Ha egy elem figyelmeztető szimbólummal rendelkezik, az azt jelenti, hogy van egy jegyzet, amelyet olvashat, ha kibontja az elemet.

Tiszta build létrehozása

A projekt frissítése után tisztítsa meg és kompilálja.

  1. Kattintson a jobb gombbal a WebSiteRatings projektre a Megoldáskezelő ablakban, és válassza a Tiszta lehetőséget.
  2. Kattintson a jobb gombbal a WebSiteRatings projektre a Megoldáskezelő ablakban, és válassza a Build lehetőséget.

Ha az alkalmazás hibát észlelt, az Hibalista ablakban találhatja meg őket, ahol a javításukra vonatkozó javaslat is elérhető.

A frissítést követő lépések

Ha a projektet .NET-keretrendszerről .NET-re frissítik, a .NET-keretrendszerről a .NET-keretrendszerről a .NET-keretrendszerre való frissítés után tekintse át a Modernizálás című cikkben található információkat.

A frissítés után a következőt kell elvégeznie:

  • Ellenőrizze NuGet-csomagjait.

    A .NET frissítési segéd frissített néhány csomagot új verziókra. A cikkben szereplő mintaalkalmazással a Microsoft.Data.Sqlite NuGet-csomag 1.0.0-ról8.0.x-re frissült. Az 1.0.0 azonban a NuGet-csomagtól függ, de a SQLite8.0.x eltávolítja ezt a függőséget. A SQLite NuGet-csomagra továbbra is hivatkozik a projekt, bár már nincs rá szükség. Mind a SQLiteSQLite.Native NuGet-csomagok eltávolíthatók a projektből.

  • Távolítsa el a régi NuGet-csomagokat.

    A packages.config fájl már nem szükséges, és törölhető a projektből, mivel a NuGet-csomag hivatkozásai most már deklarálva vannak a projektfájlban. Emellett a helyi NuGet-csomaggyorsítótár-mappa , a Csomagok nevű mappa a projekt mappájában vagy szülőmappájában található. Ez a helyi gyorsítótármappa törölhető. Az új NuGet-csomaghivatkozások egy globális gyorsítótármappát használnak a csomagokhoz, amely a felhasználó profilkönyvtárában érhető el .nuget\packages néven.

  • Távolítsa el a System.Configuration könyvtárat.

    A legtöbb .NET-keretrendszer-alkalmazás hivatkozik a kódtárra System.Configuration . A frissítés után lehetséges, hogy a kódtárra továbbra is közvetlenül hivatkozik a rendszer.

    A System.Configuration kódtár a app.config fájl használatával biztosít futásidejű konfigurációs beállításokat az alkalmazás számára. A .NET esetében ezt a kódtárat a System.Configuration.ConfigurationManager NuGet-csomag váltotta fel. Távolítsa el a kódtárra mutató hivatkozást, és adja hozzá a NuGet-csomagot a projekthez.

  • Ellenőrizze, hogy hol lehet modernizálni az alkalmazást.

    Az API-k és a kódtárak meglehetősen megváltoztak a .NET megjelenése óta. A legtöbb esetben a .NET-keretrendszer nem rendelkezik hozzáféréssel ezekhez a fejlesztésekhez. A .NET-re való frissítéssel mostantól modernebb kódtárakhoz is hozzáférhet.

    A következő szakaszok a jelen cikk által használt mintaalkalmazás modernizálásának területeit ismertetik.

Modernizálás: Webböngésző-vezérlő

A WebBrowser WPF mintaalkalmazás által hivatkozott vezérlő az Internet Exploreren alapul, amely elavult. A .NET-hez készült WPF a Microsoft Edge-en alapuló WebView2 vezérlőt használhatja. Az új WebView2 webböngésző-vezérlőre való frissítéshez hajtsa végre az alábbi lépéseket:

  1. Adja hozzá a Microsoft.Web.WebView2 NuGet-csomagot.

  2. A MainWindow.xaml fájlban:

    1. Importálja a vezérlőt a wpfControls névtérbe a gyökérelemben:

      <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. Azon a helyen, ahol a <Border> elemet deklarálják, távolítsa el a WebBrowser vezérlőt, és cserélje le a wpfControls:WebView2 vezérlőre.

      <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. Szerkessze a MainWindow.xaml.cs háttérkód fájlt. Frissítse a metódust ListBox_SelectionChanged , hogy a browser.Source tulajdonságot érvényes Uriértékre állítsa. Ez a kód korábban egy sztring formájában adta át a weboldal URL-címét, de a WebView2 vezérlőhöz egy Uri szükséges.

    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>");
    }
    

Attól függően, hogy a Windows melyik verzióját futtatja az alkalmazás felhasználója, előfordulhat, hogy telepítenie kell a WebView2 futtatókörnyezetet. További információ: A WebView2 használatának első lépései a WPF-alkalmazásokban.

Modernizálj: appsettings.json

A .NET-keretrendszer a App.config fájllal tölti be az alkalmazás beállításait, például a kapcsolati sztringeket és a naplózási szolgáltatókat. A .NET mostantól a appsettings.json fájlt használja az alkalmazásbeállításokhoz. App.config fájlok a NuGet-csomagon keresztül támogatottak a System.Configuration.ConfigurationManager .NET-ben, a appsettings.json támogatását pedig a Microsoft.Extensions.Configuration NuGet-csomag biztosítja.

Ahogy más kódtárak frissülnek .NET-re, modernizálnak azáltal, hogy appsettings.json-t támogatnak ahelyett, hogy App.config-t használnának. Például a .NET Frameworkben a .NET 6+-ra frissített naplózási szolgáltatók már nem használják a App.config-t a beállításokhoz. Jó követni az irányukat, és távolodni a App.config használatától, ahol csak lehet.

appsettings.json használata a WPF-mintaalkalmazással

A WPF mintaalkalmazás frissítése után például használja a appsettings.json a kapcsolati sztringet a helyi adatbázishoz.

  1. Távolítsa el a System.Configuration.ConfigurationManager NuGet-csomagot.

  2. Adja hozzá a Microsoft.Extensions.Configuration.Json NuGet-csomagot.

  3. Adjon hozzá egy fájlt a appsettings.jsonnevű projekthez.

  4. Állítsa be a appsettings.json fájlt a kimeneti könyvtárba való másoláshoz.

    Állítsa be a másolást kimeneti beállításra a Visual Studióban a Tulajdonságok ablak használatával, miután kiválasztotta a fájlt a Megoldáskezelőben. Másik lehetőségként közvetlenül szerkesztheti a projektet, és hozzáadhatja a következőket ItemGroup:

      <ItemGroup>
        <Content Include="appsettings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
  5. Migrálja a App.config fájl beállításait egy új appsettings.json fájlba.

    A WPF mintaalkalmazásbanapp.config csak egyetlen kapcsolati sztringet tartalmazott. Szerkessze a appsettings.json fájlt a kapcsolat string definiálásához.

    {
      "ConnectionStrings": {
        "database": "DataSource=sqlite.db;"
      }
    }
    
  6. Szerkessze az App.xaml.cs fájlt, és példányosítson egy konfigurációs objektumot, amely betölti a appsettings.json fájlt. A hozzáadott sorok ki vannak emelve:

    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. A .\Models\Database.cs fájlban módosítsa a metódust OpenConnection az új App.Config tulajdonság használatára. Ehhez importálnia kell a névteret 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 egy kiterjesztési metódus, amelyet a Microsoft.Extensions.Configuration névtér biztosít.