Porting Aplikasi Desktop ke .NET Core

Sejak saya mulai bekerja dengan komunitas tentang porting aplikasi desktop dari .NET Framework ke .NET Core, saya perhatikan bahwa ada “dua kubu”: perwakilan satu menginginkan daftar instruksi yang sangat sederhana dan singkat untuk memindahkan aplikasi mereka ke .NET Core , sementara perwakilan dari yang lain lebih suka pendekatan yang lebih berprinsip dengan banyak informasi awal. Alih-alih menulis dokumen seperti "Pisau Tentara Swiss", kami akan menerbitkan dua posting blog, satu untuk setiap "kamp":

  • Posting ini adalah kasus sederhana . Ini berfokus pada instruksi sederhana dan aplikasi kecil dan mempertimbangkan cara termudah untuk port aplikasi ke .NET Core.
  • Nanti kami akan menerbitkan posting lain untuk kasus yang lebih kompleks . Ini akan fokus pada aplikasi non-sepele, seperti aplikasi WPF dengan dependensi pada WCF dan paket UI pihak ketiga.

Jika Anda lebih suka menonton video daripada membaca, maka di sini ada video tempat saya melakukan semua yang dijelaskan di bawah ini.


Langkah 0 - Prasyarat


Untuk mentransfer aplikasi desktop ke Core, Anda akan memerlukan .NET Core 3 dan Visual Studio 2019.

Langkah 1 - Luncurkan Portability Analyzer


Sebelum porting, Anda harus memeriksa seberapa kompatibel aplikasi Anda dengan .NET Core. Untuk melakukan ini, unduh dan jalankan .NET Portability Analyzer .

  • Pada tab pertama, Ringkasan Portabilitas, jika semua nilai dalam kolom .NET Core adalah 100% (semuanya disorot dengan warna hijau), kode Anda sepenuhnya kompatibel, dan Anda dapat pergi ke Langkah 2.
  • Jika Anda memiliki nilai kurang dari 100%, pertama-tama lihat semua rakitan yang bukan bagian dari aplikasi Anda. Untuk mereka, Anda perlu memeriksa apakah pembuatnya menyediakan versi untuk .NET Core atau .NET Standard.
  • Sekarang lihat bagian lain dari rakitan yang berasal dari kode Anda. Jika tidak ada perangkat yang ditentukan dalam Laporan Portabilitas, lanjutkan ke Langkah 2. Setelah Anda melakukannya, buka tab Detail, filter tabel dengan mengklik kolom Majelis dan hanya fokus pada yang terkait dengan aplikasi Anda. Jelajahi daftar dan kode refactoring untuk berhenti menggunakan API atau ganti menggunakan API dengan alternatif .NET Core.

gambar

Langkah 2 - Memigrasikan .csproj ke Gaya SDK


Di Solution Explorer, klik kanan proyek Anda (bukan solusi!). Apakah Anda melihat Edit File Proyek ? Jika demikian, maka Anda sudah menggunakan file proyek bergaya SDK, jadi Anda harus pergi ke Langkah 3 . Jika tidak, lakukan hal berikut:

  • Periksa di Solution Explorer jika proyek tersebut berisi file paket.config. Jika tidak, maka tidak ada tindakan yang diperlukan, tetapi jika ya, klik kanan paket.config dan pilih Migrasi paket.config ke PackageReference . Kemudian klik OK .
  • Buka file proyek dengan mengklik kanan pada proyek dan memilih Unload Project . Kemudian klik kanan proyek dan pilih Edit <nama proyek Anda> .csproj .
  • Salin konten file proyek di suatu tempat, misalnya, ke Notepad, sehingga Anda dapat mencarinya nanti.
  • Hapus semuanya dari file proyek yang dibuka di Visual Studio (Saya tahu ini terdengar agresif, tetapi kami hanya akan menambahkan konten yang diperlukan dari salinan yang baru saja kami buat dalam beberapa langkah). Alih-alih hanya menghapus teks, rekatkan kode berikut.

    Untuk aplikasi di WinForms:

    <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project> 

    Untuk aplikasi WPF:

     <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net472</TargetFramework> <UseWPF>true</UseWPF> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project> 
  • Temukan Notepad PackageReference . Jika Anda belum menemukan apa pun, lanjutkan. Jika Anda menemukan PackageReference , salin seluruh ItemGroup yang berisi PackageReference ke file proyek yang dibuka di Visual Studio, langsung di bawah garis yang dimasukkan pada langkah di atas. Lakukan ini untuk setiap elemen PackageReference yang Anda temukan. Blok yang disalin akan terlihat seperti ini:

     <ItemGroup> <PackageReference Include="NUnit"> <Version>3.11.0</Version> </PackageReference> </ItemGroup> 
  • Sekarang lakukan hal yang sama seperti di atas untuk ProjectReference . Jika Anda belum menemukan apa pun, lanjutkan. Jika Anda menemukan elemen ProjectReference , mereka akan terlihat seperti ini:

     <ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj"> <Project>{7bce0d50-17fe-4fda-b6b7-e7960aed8ac2}</Project> <Name>WindowsFormsApp1</Name> </ProjectReference> </ItemGroup> 
  • Anda dapat menghapus baris dengan properti Project dan Name , karena mereka tidak diperlukan dalam gaya baru file proyek. Jadi untuk setiap ProjectReference yang Anda temukan (jika ada), salin hanya ItemGroup dan ProjectReference .

     <ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup> 
  • Simpan semuanya. Tutup file .csproj di Visual Studio. Klik kanan proyek Anda di Solution Explorer dan pilih Muat Ulang Proyek . Bangun kembali dan pastikan tidak ada kesalahan.

Berita bagus, Anda baru saja memperbarui file proyek ke gaya SDK baru! Proyek ini masih ditargetkan pada .NET Framework, tetapi sekarang Anda dapat mengkonfigurasi ulang untuk .NET Core.

Langkah 3 - Penargetan Ulang pada .NET Core


Buka file proyek dengan mengklik dua kali di Solution Explorer . Temukan properti TargetFramework dan ubah nilainya menjadi netcoreapp3.0 . File proyek Anda sekarang akan terlihat seperti ini:

 <Project Sdk="Microsoft.NET.Sdk.WindowsDesktop"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> ... </PropertyGroup> ... </Project> 

Bangun dan jalankan proyek Anda. Selamat, Anda memigrasikannya ke .NET Core 3!

Perbaikan bug


Jika Anda mengalami kesalahan seperti

 The type or namespace <some name> could not be found 

atau

 The name <some name> does not exist in the current context 

dan jika Laporan Portabilitas Anda ditampilkan dengan warna hijau, Anda harus tahu bahwa mereka mudah diperbaiki dengan hanya menambahkan paket NuGet dengan pustaka yang sesuai. Jika Anda tidak dapat menemukan paket NuGet dengan pustaka yang hilang, maka cobalah menghubungi Microsoft.Windows.Compatibility . Paket ini menambahkan ~ 21K .NET API dari .NET Framework.

Bekerja dengan desainer


Meskipun antarmuka pengguna aplikasi dapat diedit menggunakan kode, pengembang biasanya lebih suka menggunakan konstruktor visual. Dengan .NET Core, kami harus mengubah arsitektur karya desainer dengan proyek .NET Core:

  • WPF Designer sudah dalam mode pratinjau, dan kami sedang berupaya menambahkan fitur tambahan untuk itu.
  • WinForms Designer untuk .NET Core akan tersedia nanti, jadi untuk sekarang, Anda dapat menggunakan WinForms Designer untuk .NET Framework sebagai solusinya.

Berikut cara menggunakan konstruktor WinForms untuk .NET Framework:

  1. Salin file .csproj (misalnya, MyProject.csproj ), berikan nama yang berbeda, misalnya, MyProject.NetFramework.csproj, dan letakkan di sebelah file proyek yang ada.
  2. Pastikan proyek Anda ditutup di Visual Studio, buka proyek baru MyProject.NetFramework.csproj .
    Di Solution Explorer, klik kanan proyek Anda dan pilih Properties . Pada tab Aplikasi (harus terbuka secara default), tetapkan nama Majelis dan namespace Default ke nilai yang sama seperti dalam proyek asli (hapus ".NetFramework" dari nama).
    Simpan solusi ini di sebelah solusi yang ada.
  3. Buka file proyek baru dan ubah TargetFramework ke net472 .
  4. Sekarang Anda harus menggunakan konstruktor WinForms, muat proyek Anda dari MyProject.NetFramework.csproj dan Anda dapat mulai bekerja dengan konstruktor .NET Framework. Ketika Anda selesai dengan itu, tutup dan buka proyek Anda dengan file proyek .NET Core.
  5. Ini hanya solusi sampai konstruktor WinForms untuk .NET Core siap.

Mengapa beralih ke .NET Core?


Tonton video di mana Scott Hunter dan saya berbicara tentang semua pembaruan terbaru tentang .NET Core 3. Bermigrasi ke .NET Core 3.0 .

Source: https://habr.com/ru/post/id454508/


All Articles