Aracılığıyla paylaş


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
  • Kontrol kütüphanesi
  • .NET kitaplığı

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

Önkoşullar

  • Windows işletim sistemi
  • .NET 8 hedeflemek için Visual Studio 2022 sürüm 17.7 veya üstünü
  • .NET 7 hedeflemek için Visual Studio 2022 sürüm 17.1 veya sonrası
  • Visual Studio için .NET Yükseltme Yardımcısı uzantısını

Tanıtım uygulaması

Bu makale, .NET Samples 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 kütüphanesine bağımlıdır, bu nedenle önce StarVoteControl yükseltilmelidir.

Bahşiş

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. StarVoteControl projesine sağ tıklayın ve Çözüm Gezgini penceresinde Yükseltseçin:

    Visual Studio'da .NET Yükseltme Yardımcısı'nın Yükseltme menü öğesini .

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

  2. yerinde proje yükseltmeseç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.

    Önce .NET 8.0'i, sonra iseİ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çimi seçin.

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

    21 öğeden 7'sinin atlandığını gösteren .NET Yükseltme Yardımcısı yükseltme sonuçları sekmesi.

    Düz yeşil daireli yapıtlar yükseltilirken, boş yeşil daireler atlandı. Atlanan artefaktlar, yükseltme yardımcısının yükseltilecek bir öğe 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ükseltseçin:
  2. Yükseltme modu olarak yerinde proje yükseltme seçin.
  3. Hedef çerçeve için .NET 8.0 seçin ve İleriseçin.
  4. Tüm öğeleri seçili bırakın ve yükseltme seçiminiseç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şturun

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 Derleseçeneğini seçin.

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ı adımlar

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, Microsoft.Data.Sqlite NuGet paketi 1.0.0'den 8.0.xsürümüne yükseltildi. Ancak, 1.0.0SQLite NuGet paketine bağlıdır, ancak 8.0.x bu bağımlılığı kaldırır. Proje hâlâ SQLite NuGet paketine başvuruyor, ancak artık bu pakete ihtiyaç duyulmuyor. Hem SQLite hem de SQLite.Native NuGet paketleri projeden kaldırılabilir.

  • Eski NuGet paketlerini temizleyin.

    NuGet paket başvuruları artık proje dosyasında bildirildiği için packages.config dosyası artık gerekli değildir ve projenizden silinebilir. Ayrıca, Packagesadlı yerel NuGet paket ö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 .nuget\packagesadlı paketler için genel önbellek klasörü kullanır.

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

    .NET Framework uygulamalarının çoğu System.Configuration kitaplığına başvurur. Yükselttikten sonra, bu kitaplığa hâlâ doğrudan referans veriliyor olabilir.

    System.Configuration kitaplığı, 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 System.Configuration.ConfigurationManager NuGet paketiyle 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

WPF örnek uygulaması tarafından başvurulan WebBrowser denetimi, 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. <Border> öğesinin bildirildiği yerde aşağı doğru WebBrowser denetimini kaldırın ve wpfControls:WebView2 denetimiyle 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. browser.Source özelliğini geçerli bir Uriolarak ayarlamak için ListBox_SelectionChanged yöntemini güncelleştirin. Bu kod daha önce web sitesi URL'sine dize olarak geçirildi, ancak WebView2 denetimi bir Urigerektirir.

    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ı dizeleri ve günlük sağlayıcıları gibi ayarlarını yüklemek amacıyla App.config dosyasını kullanır. .NET artık uygulama ayarları için appsettings.json dosyasını kullanıyor. App.config dosyaları System.Configuration.ConfigurationManager NuGet paketi aracılığıyla .NET'te desteklenir ve appsettings.json desteği Microsoft.Extensions.Configuration NuGet paketi tarafından sağlanır.

Diğer kitaplıklar .NET'e yükseltildikçe, App.configyerine 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önlendirmelerini takip etmek ve App.config kullanmaktan mümkün olduğunca kaçınmak iyidir.

WPF örnek uygulamasıyla appsettings.json kullanın

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

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

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

  3. projeye appsettings.jsonadlı bir dosya ekleyin.

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

    Çözüm Gezgini'nde dosyayı seçtikten sonra, Özellikler penceresini kullanarak kopyayı çıkış ayarına ayarlayın. Alternatif olarak, projeyi doğrudan düzenleyebilir ve aşağıdaki 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ı dizesini tanımlamak için appsettings.json dosyasını düzenleyin:

    {
      "ConnectionStrings": {
        "database": "DataSource=sqlite.db;"
      }
    }
    
  6. App.xaml.cs dosyasını düzenleyin ve appsettings.json dosyasını yükleyen bir yapılandırma nesnesini oluşturun, eklenen satırlar vurgulanmıştı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, yeni App.Config özelliğini kullanmak için OpenConnection yöntemini değiştirin. Bunun için Microsoft.Extensions.Configuration ad alanının 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, Microsoft.Extensions.Configuration ad alanı tarafından sağlanan bir uzantı yöntemidir.