Bagikan melalui


Cara meningkatkan aplikasi desktop WPF ke .NET 8

Artikel ini menjelaskan cara memutakhirkan aplikasi desktop Windows Presentation Foundation (WPF) ke .NET 8. Meskipun WPF berjalan pada .NET, teknologi lintas platform, WPF masih merupakan kerangka kerja khusus Windows. Jenis proyek terkait WPF berikut dapat ditingkatkan dengan Asisten Peningkatan .NET:

  • Proyek WPF
  • Pustaka kontrol
  • Pustaka .NET

Jika Anda meningkatkan dari .NET Framework ke .NET, pertimbangkan untuk meninjau artikel Perbedaan dengan WPF .NET dan panduan Porting dari .NET Framework ke .NET .

Prasyarat

Aplikasi demo

Artikel ini ditulis dalam konteks memutakhirkan proyek Sampel Favorit Web, yang dapat Anda unduh dari repositori GitHub Sampel .NET.

Memulai peningkatan

Jika Anda meningkatkan beberapa proyek, mulailah dengan proyek yang tidak memiliki dependensi. Dalam sampel Favorit Web, proyek WebSiteRatings bergantung pada pustaka StarVoteControl , sehingga StarVoteControl harus ditingkatkan terlebih dahulu.

Tip

Pastikan untuk memiliki cadangan kode Anda, seperti di kontrol sumber atau salinan.

Gunakan langkah-langkah berikut untuk meningkatkan proyek di Visual Studio:

  1. Klik kanan pada proyek StarVoteControl di jendela Penjelajah Solusi dan pilih Tingkatkan:

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

    Tab baru dibuka yang meminta Anda untuk memilih bagaimana Anda ingin peningkatan dilakukan.

  2. Pilih Peningkatan proyek di tempat.

  3. Selanjutnya, pilih kerangka kerja target. Berdasarkan jenis proyek yang Anda tingkatkan, berbagai opsi disajikan. .NET Standard 2.0 adalah pilihan yang baik jika pustaka tidak mengandalkan teknologi desktop seperti WPF dan dapat digunakan oleh proyek .NET Framework dan proyek .NET. Namun, rilis .NET terbaru menyediakan banyak peningkatan bahasa dan pengkompilasi melalui .NET Standard.

    Pilih .NET 8.0 lalu pilih Berikutnya.

  4. Pohon ditampilkan dengan semua artefak yang terkait dengan proyek, seperti file kode dan pustaka. Anda dapat meningkatkan artefak individual atau seluruh proyek, yang merupakan default. Pilih Tingkatkan pilihan untuk memulai peningkatan.

    Setelah peningkatan selesai, hasilnya ditampilkan:

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

    Artefak dengan lingkaran hijau padat ditingkatkan sementara lingkaran hijau kosong dilewati. Artefak yang dilewati berarti bahwa asisten peningkatan tidak menemukan apa pun untuk ditingkatkan.

Sekarang setelah pustaka pendukung aplikasi ditingkatkan, tingkatkan aplikasi utama.

Meningkatkan versi aplikasi

Setelah semua pustaka pendukung ditingkatkan, proyek aplikasi utama dapat ditingkatkan. Lakukan langkah-langkah berikut:

  1. Klik kanan pada proyek WebSiteRatings di jendela Penjelajah Solusi dan pilih Tingkatkan:
  2. Pilih Peningkatan proyek di tempat sebagai mode peningkatan.
  3. Pilih .NET 8.0 untuk kerangka kerja target dan pilih Berikutnya.
  4. Biarkan semua artefak dipilih dan pilih Pilihan peningkatan.

Setelah peningkatan selesai, hasilnya ditampilkan. Jika item memiliki simbol peringatan, itu berarti bahwa ada catatan untuk Anda baca, yang dapat Anda lakukan dengan memperluas item.

Membuat build bersih

Setelah proyek Anda ditingkatkan, bersihkan dan kompilasi.

  1. Klik kanan pada proyek WebSiteRatings di jendela Penjelajah Solusi dan pilih Bersihkan.
  2. Klik kanan pada proyek WebSiteRatings di jendela Penjelajah Solusi dan pilih Bangun.

Jika aplikasi Anda mengalami kesalahan, Anda dapat menemukannya di jendela Daftar Kesalahan dengan rekomendasi cara memperbaikinya.

Langkah-langkah pasca-peningkatan

Jika proyek Anda sedang ditingkatkan dari .NET Framework ke .NET, tinjau informasi di artikel Modernisasi setelah memutakhirkan ke .NET dari .NET Framework .

Setelah memutakhirkan, Anda harus:

  • Periksa paket NuGet Anda.

    Asisten Peningkatan .NET meningkatkan beberapa paket ke versi baru. Dengan aplikasi sampel yang disediakan dalam artikel ini, Microsoft.Data.Sqlite paket NuGet ditingkatkan dari 1.0.0 menjadi 8.0.x. Namun, 1.0.0 tergantung pada paket NuGet, tetapi 8.0.x menghapus dependensi tersebutSQLite. Paket SQLite NuGet masih dirujuk oleh proyek, meskipun tidak lagi diperlukan. SQLite Paket NuGet dan SQLite.Native dapat dihapus dari proyek.

  • Bersihkan paket NuGet lama.

    File packages.config tidak lagi diperlukan dan dapat dihapus dari proyek Anda, karena referensi paket NuGet sekarang dideklarasikan dalam file proyek. Selain itu, folder cache paket NuGet lokal, bernama Packages, berada di folder atau folder induk proyek. Folder cache lokal ini dapat dihapus. Referensi paket NuGet baru menggunakan folder cache global untuk paket, tersedia di direktori profil pengguna, bernama .nuget\packages.

  • System.Configuration Hapus pustaka.

    Sebagian besar aplikasi .NET Framework mereferensikan System.Configuration pustaka. Setelah memutakhirkan, ada kemungkinan pustaka ini masih langsung dirujuk.

    Pustaka System.Configuration menggunakan file app.config untuk menyediakan opsi konfigurasi run-time ke aplikasi Anda. Untuk .NET, pustaka ini digantikan oleh System.Configuration.ConfigurationManager paket NuGet. Hapus referensi ke pustaka dan tambahkan paket NuGet ke proyek Anda.

  • Periksa tempat untuk memodernisasi aplikasi Anda.

    API dan pustaka telah berubah cukup sedikit sejak .NET dirilis. Dan dalam kebanyakan kasus, .NET Framework tidak memiliki akses ke peningkatan ini. Dengan memutakhirkan ke .NET, anda sekarang memiliki akses ke pustaka yang lebih modern.

    Bagian berikutnya menjelaskan area yang Anda modernisasi aplikasi sampel yang digunakan oleh artikel ini.

Modernisasi: Kontrol browser web

WebBrowser Kontrol yang dirujuk oleh aplikasi sampel WPF didasarkan pada Internet Explorer, yang sudah kedaluarsa. WPF untuk .NET dapat menggunakan kontrol WebView2 berdasarkan Microsoft Edge. Selesaikan langkah-langkah berikut untuk meningkatkan ke kontrol browser web baru WebView2 :

  1. Microsoft.Web.WebView2 Tambahkan paket NuGet.

  2. Dalam file MainWindow.xaml:

    1. Impor kontrol ke namespace wpfControls di elemen akar:

      <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. Turun di <Border> mana elemen dideklarasikan, hapus WebBrowser kontrol dan ganti dengan wpfControls:WebView2 kontrol:

      <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. Edit kode MainWindow.xaml.cs di belakang file. ListBox_SelectionChanged Perbarui metode untuk mengatur properti ke browser.Source yang validUri. Kode ini sebelumnya diteruskan di URL situs web sebagai string, tetapi WebView2 kontrol memerlukan Uri.

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

Bergantung pada versi Windows mana yang dijalankan pengguna aplikasi Anda, mereka mungkin perlu menginstal runtime WebView2. Untuk informasi selengkapnya, lihat Mulai menggunakan WebView2 di aplikasi WPF.

Modernisasi: appsettings.json

.NET Framework menggunakan file App.config untuk memuat pengaturan untuk aplikasi Anda, seperti string koneksi dan penyedia pengelogan. .NET sekarang menggunakan file appsettings.json untuk pengaturan aplikasi. File App.config didukung di .NET melalui System.Configuration.ConfigurationManager paket NuGet, dan dukungan untuk appsettings.json disediakan oleh Microsoft.Extensions.Configuration paket NuGet.

Saat pustaka lain meningkatkan ke .NET, pustaka tersebut memodernisasi dengan mendukung appsettings.json alih-alih App.config. Misalnya, penyedia pengelogan di .NET Framework yang telah ditingkatkan untuk .NET 6+ tidak lagi menggunakan App.config untuk pengaturan. Ada baiknya untuk mengikuti arah mereka dan juga menjauh dari menggunakan App.config di mana Anda bisa.

Menggunakan appsettings.json dengan aplikasi sampel WPF

Sebagai contoh, setelah memutakhirkan aplikasi sampel WPF, gunakan appsettings.json untuk string koneksi ke database lokal.

  1. System.Configuration.ConfigurationManager Hapus paket NuGet.

  2. Microsoft.Extensions.Configuration.Json Tambahkan paket NuGet.

  3. Tambahkan file ke proyek bernama appsettings.json.

  4. Atur file appsettings.json untuk disalin ke direktori output.

    Atur pengaturan salin ke output melalui Visual Studio menggunakan jendela Properti setelah memilih file di Penjelajah Solusi. Atau Anda dapat mengedit proyek secara langsung dan menambahkan yang berikut:ItemGroup

      <ItemGroup>
        <Content Include="appsettings.json">
          <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </Content>
      </ItemGroup>
    
  5. Migrasikan pengaturan dalam file App.config ke file appsettings.json baru.

    Di aplikasi sampel WPF, app.config hanya berisi satu string koneksi. Edit file appsettings.json untuk menentukan string koneksi:

    {
      "ConnectionStrings": {
        "database": "DataSource=sqlite.db;"
      }
    }
    
  6. Edit file App.xaml.cs, instancing objek konfigurasi yang memuat file appsettings.json, baris yang ditambahkan disorot:

    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. Dalam file .\Models\Database.cs, ubah OpenConnection metode untuk menggunakan properti baruApp.Config. Ini memerlukan impor Microsoft.Extensions.Configuration namespace:

    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 adalah metode ekstensi yang disediakan oleh Microsoft.Extensions.Configuration namespace layanan.