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ı
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:
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.
yerinde proje yükseltme
seçin. 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. 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:
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:
- Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Yükseltseçin:
- Yükseltme modu olarak yerinde proje yükseltme seçin.
- Hedef çerçeve için .NET 8.0
seçin ve İleri seçin. - 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.
- Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Temizle'yi seçin.
- Çö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. HemSQLite
hem deSQLite.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ıkSystem.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:
Microsoft.Web.WebView2
NuGet paketini ekleyin.MainWindow.xaml dosyasında:
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">
<Border>
öğesinin bildirildiği yerde aşağı doğruWebBrowser
denetimini kaldırın vewpfControls: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>
Dosyanın arkasındaki MainWindow.xaml.cs kodunu düzenleyin.
browser.Source
özelliğini geçerli bir Uriolarak ayarlamak içinListBox_SelectionChanged
yöntemini güncelleştirin. Bu kod daha önce web sitesi URL'sine dize olarak geçirildi, ancak WebView2 denetimi birUri
gerektirir.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.
System.Configuration.ConfigurationManager
NuGet paketini kaldırın.Microsoft.Extensions.Configuration.Json
NuGet paketini ekleyin.projeye appsettings.jsonadlı bir dosya ekleyin.
Çı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
ItemGroup
ekleyebilirsiniz:<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
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;" } }
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(); } } }
.\Models\Database.cs dosyasında, yeni
App.Config
özelliğini kullanmak içinOpenConnection
yöntemini değiştirin. Bunun içinMicrosoft.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.
.NET Desktop feedback