WPF masaüstü uygulamasını .NET 8'e yükseltme

Bu makalede, bir Windows Presentation Foundation (WPF) masaüstü uygulamasını .NET 8'e yükseltme açıklanmaktadır. WPF, platformlar arası bir teknoloji olan .NET üzerinde çalıştırılsa da WPF hala yalnızca Windows'a yönelik bir çerçevedir. Aşağıdaki WPF ile ilgili proje türleri .NET Yükseltme Yardımcısı ile yükseltilebilir:

  • WPF projesi
  • Denetim kitaplığı
  • .NET kitaplığı

.NET Framework'ten .NET'e yükseltiyorsanız WPF .NET ile Farklılıklar makalesini ve .NET Framework'ten .NET'e taşıma kılavuzunu gözden geçirmeyi göz önünde bulundurun.

Önkoşullar

Tanıtım uygulaması

Bu makale, .NET Örnekleri GitHub deposundan indirebileceğiniz Web Sık Kullanılanları Örnek projesini yükseltme bağlamında yazılmıştır.

Yükseltmeyi başlatma

Birden çok proje yükseltiyorsanız, bağımlılığı olmayan projelerle başlayın. Web Sık Kullanılanları örneğinde, WebSiteRatings projesi StarVoteControl kitaplığına bağlıdır, bu nedenle önce StarVoteControl yükseltilmelidir.

İpucu

Kaynak denetiminde veya kopyada olduğu gibi kodunuzun yedeğine sahip olduğundan emin olun.

Visual Studio'da bir projeyi yükseltmek için aşağıdaki adımları kullanın:

  1. Çözüm Gezgini penceresinde StarVoteControl projesine sağ tıklayın ve Yükselt'i seçin:

    The .NET Upgrade Assistant's Upgrade menu item in Visual Studio.

    Yükseltmenin nasıl gerçekleştirilmesini istediğinizi seçmenizi isteyen yeni bir sekme açılır.

  2. Yerinde proje yükseltme'yi seçin.

  3. Ardından hedef çerçeveyi seçin. Yükseltmekte olduğunuz projenin türüne bağlı olarak farklı seçenekler sunulur. .NET Standard 2.0 , kitaplık WPF gibi bir masaüstü teknolojisine bağımlı değilse ve hem .NET Framework projeleri hem de .NET projeleri tarafından kullanılabiliyorsa iyi bir seçimdir. Ancak, en son .NET sürümleri .NET Standard üzerinde birçok dil ve derleyici geliştirmesi sağlar.

    .NET 8.0'ı ve ardından İleri'yi seçin.

  4. Kod dosyaları ve kitaplıklar gibi projeyle ilgili tüm yapıtlarla bir ağaç gösterilir. Tek tek yapıtları veya varsayılan olan projenin tamamını yükseltebilirsiniz. Yükseltmeyi başlatmak için Yükseltme seçimini seçin.

    Yükseltme tamamlandığında sonuçlar görüntülenir:

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

    Düz yeşil daireli yapıtlar yükseltilirken, boş yeşil daireler atlandı. Atlanan yapıtlar, yükseltme yardımcısının yükseltecek bir şey bulmadığını gösterir.

Uygulamanın destek kitaplığı yükseltildiğinden ana uygulamayı yükseltin.

Uygulamayı yükseltme

Tüm destekleyici kitaplıklar yükseltildikten sonra ana uygulama projesi yükseltilebilir. Aşağıdaki adımları gerçekleştirin:

  1. Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Yükselt'i seçin:
  2. Yükseltme modu olarak Yerinde proje yükseltme'yi seçin.
  3. Hedef çerçeve için .NET 8.0'ı ve ardından İleri'yi seçin.
  4. Tüm yapıtları seçili bırakın ve Seçimi yükselt'i seçin.

Yükseltme tamamlandıktan sonra sonuçlar gösterilir. Bir öğenin uyarı simgesi varsa, bu, okumanız için bir not olduğu anlamına gelir ve bunu öğeyi genişleterek yapabilirsiniz.

Temiz bir derleme oluşturma

Projeniz yükseltildikten sonra temizleyin ve derleyin.

  1. Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Temizle'yi seçin.
  2. Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Oluştur'a tıklayın.

Uygulamanız herhangi bir hatayla karşılaştıysa, bunları hata listesi penceresinde, bunların nasıl düzeltileceğini gösteren bir öneriyle bulabilirsiniz.

Yükseltme sonrası yapılacaklar

Projeniz .NET Framework'ten .NET'e yükseltiliyorsa.NET Framework'ten .NET'e yükselttikten sonra modernleştirme makalesindeki bilgileri gözden geçirin.

Yükseltmeden sonra şunları yapmak istersiniz:

  • NuGet paketlerinizi denetleyin.

    .NET Yükseltme Yardımcısı bazı paketleri yeni sürümlere yükseltti. Bu makalede sağlanan örnek uygulamayla NuGet Microsoft.Data.Sqlite paketi 1.0.0'dan 8.0.x sürümüne yükseltildi. Ancak, 1.0.0 NuGet paketine SQLite bağlıdır, ancak 8.0.x bu bağımlılığı kaldırır. SQLite NuGet paketine proje tarafından başvurulmasına rağmen artık gerekli değildir. SQLite Hem hem de SQLite.Native NuGet paketleri projeden kaldırılabilir.

  • Eski NuGet paketlerini temizleyin.

    Packages.config dosyası artık gerekli değildir ve NuGet paket başvuruları artık proje dosyasında bildirildiği için projenizden silinebilir. Ayrıca Paketler adlı yerel NuGet paketi önbellek klasörü projenin klasöründe veya üst klasöründedir. Bu yerel önbellek klasörü silinebilir. Yeni NuGet paket başvuruları, kullanıcının profil dizininde bulunan .nuget\packages adlı paketler için genel bir önbellek klasörü kullanır.

  • System.Configuration Kitaplığı kaldırın.

    Çoğu .NET Framework uygulaması kitaplığa başvurur System.Configuration . Yükseltmeden sonra bu kitaplığa doğrudan başvurulabilir.

    Kitaplık, System.Configuration uygulamanıza çalışma zamanı yapılandırma seçenekleri sağlamak için app.config dosyasını kullanır. .NET için bu kitaplık NuGet paketiyle System.Configuration.ConfigurationManager değiştirildi. Kitaplığa başvuruyu kaldırın ve NuGet paketini projenize ekleyin.

  • Uygulamanızı modernleştirilecek yerleri denetleyin.

    .NET yayımlandıktan sonra API'ler ve kitaplıklar oldukça değişti. Çoğu durumda da .NET Framework'ün bu iyileştirmelere erişimi yoktur. .NET'e yükselterek artık daha modern kitaplıklara erişebilirsiniz.

    Sonraki bölümlerde, bu makale tarafından kullanılan örnek uygulamayı modernleştirdiğiniz alanlar açıklanmaktadır.

Modernleştirme: Web tarayıcısı denetimi

WebBrowser WPF örnek uygulaması tarafından başvurulan denetim, güncel olmayan Internet Explorer'ı temel alır. .NET için WPF, Microsoft Edge'i temel alan WebView2 denetimini kullanabilir. Yeni WebView2 web tarayıcısı denetimine yükseltmek için aşağıdaki adımları tamamlayın:

  1. Microsoft.Web.WebView2 NuGet paketini ekleyin.

  2. MainWindow.xaml dosyasında:

    1. Denetimi kök öğesindeki wpfControls ad alanına aktarın:

      <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. Öğenin bildirildiği yerde <Border> aşağı doğru denetimi kaldırın WebBrowser ve denetimiyle wpfControls:WebView2 değiştirin:

      <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. dosyanın arkasındaki MainWindow.xaml.cs kodunu düzenleyin. ListBox_SelectionChanged özelliğini geçerli Uribir olarak ayarlamak browser.Source için yöntemini güncelleştirin. Bu kod daha önce web sitesi URL'sine dize olarak geçirildi, ancak WebView2 denetim için bir Urigerekir.

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

Uygulamanızın kullanıcısının hangi Windows sürümünü çalıştırdığını bağlı olarak, WebView2 çalışma zamanını yüklemesi gerekebilir. Daha fazla bilgi için bkz . WPF uygulamalarında WebView2'yi kullanmaya başlama.

Modernleştirme: appsettings.json

.NET Framework, uygulamanızın bağlantı dizesi ve günlük sağlayıcıları gibi ayarlarını yüklemek için App.config dosyasını kullanır. .NET artık uygulama ayarları için appsettings.json dosyasını kullanıyor. App.config dosyaları NuGet paketi aracılığıyla System.Configuration.ConfigurationManager .NET'te desteklenir ve appsettings.json için destek NuGet paketi tarafından Microsoft.Extensions.Configuration sağlanır.

Diğer kitaplıklar .NET'e yükseltildikçe, App.config yerine appsettings.json destekleyerek modernleştirir. Örneğin, .NET Framework'te .NET 6+ için yükseltilen günlük sağlayıcıları artık ayarlar için App.config kullanmaz. Onların yönünü takip etmek ve ayrıca app.config'i kullanabileceğiniz yerden uzaklaştırmak iyidir.

WPF örnek uygulamasıyla appsettings.json kullanma

Örneğin, WPF örnek uygulamasını yükselttikten sonra bağlantı dizesi yerel veritabanına appsettings.json kullanın.

  1. System.Configuration.ConfigurationManager NuGet paketini kaldırın.

  2. Microsoft.Extensions.Configuration.Json NuGet paketini ekleyin.

  3. Projeye appsettings.json adlı bir dosya ekleyin.

  4. çıkış dizinine kopyalamak için appsettings.json dosyasını ayarlayın.

    Çözüm Gezgini dosyayı seçtikten sonra Özellikler penceresini kullanarak Visual Studio aracılığıyla çıktıya kopyalama ayarını yapın. Alternatif olarak, projeyi doğrudan düzenleyebilir ve aşağıdakileri ItemGroupekleyebilirsiniz:

      <ItemGroup>
        <Content Include="appsettings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
  5. App.config dosyasındaki ayarları yeni bir appsettings.json dosyasına geçirin.

    WPF örnek uygulamasında app.config yalnızca tek bir bağlantı dizesi içeriyordu. bağlantı dizesi tanımlamak için appsettings.json dosyasını düzenleyin:

    {
      "ConnectionStrings": {
        "database": "DataSource=sqlite.db;"
      }
    }
    
  6. App.xaml.cs dosyasını düzenleyin, appsettings.json dosyasını yükleyen bir yapılandırma nesnesine karşı, eklenen satırlar vurgulanır:

    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. .\Models\Database.cs dosyasında yöntemini yeni App.Config özelliği kullanacak şekilde değiştirinOpenConnection. Bunun için ad alanının Microsoft.Extensions.Configuration içeri aktarılması gerekir:

    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 ad alanı tarafından Microsoft.Extensions.Configuration sağlanan bir uzantı yöntemidir.