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
- Windows işletim sistemi
- .NET 8'i hedeflemek için Visual Studio 2022 sürüm 17.7 veya üzeri
- .NET 7'yi hedeflemek için Visual Studio 2022 sürüm 17.1 veya üzeri
- Visual Studio için .NET Yükseltme Yardımcısı uzantısı
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:
Çözüm Gezgini penceresinde StarVoteControl projesine sağ tıklayın ve Yükselt'i seçin:
Yükseltmenin nasıl gerçekleştirilmesini istediğinizi seçmenizi isteyen yeni bir sekme açılır.
Yerinde proje yükseltme'yi 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.
.NET 8.0'ı ve ardından İ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çimini 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 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:
- Çözüm Gezgini penceresinde WebSiteRatings projesine sağ tıklayın ve Yükselt'i seçin:
- Yükseltme modu olarak Yerinde proje yükseltme'yi seçin.
- Hedef çerçeve için .NET 8.0'ı ve ardından İleri'yi seçin.
- 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.
- Çö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 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 paketineSQLite
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 deSQLite.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 paketiyleSystem.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:
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">
Öğenin bildirildiği yerde
<Border>
aşağı doğru denetimi kaldırınWebBrowser
ve denetimiylewpfControls: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>
dosyanın arkasındaki MainWindow.xaml.cs kodunu düzenleyin.
ListBox_SelectionChanged
özelliğini geçerli Uribir olarak ayarlamakbrowser.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 birUri
gerekir.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.
System.Configuration.ConfigurationManager
NuGet paketini kaldırın.Microsoft.Extensions.Configuration.Json
NuGet paketini ekleyin.Projeye appsettings.json adlı bir dosya ekleyin.
çı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
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ı dizesi tanımlamak için appsettings.json dosyasını düzenleyin:
{ "ConnectionStrings": { "database": "DataSource=sqlite.db;" } }
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(); } } }
.\Models\Database.cs dosyasında yöntemini yeni
App.Config
özelliği kullanacak şekilde değiştirinOpenConnection
. Bunun için ad alanınınMicrosoft.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ındanMicrosoft.Extensions.Configuration
sağlanan bir uzantı yöntemidir.
.NET Desktop feedback