Karena saya telah bekerja dengan komunitas untuk porting aplikasi desktop dari .NET Framework ke .NET Core, saya perhatikan bahwa ada dua kelompok orang: beberapa menginginkan daftar instruksi yang sangat sederhana dan singkat untuk membuat aplikasi mereka di-porting ke .NET Core sementara yang lain lebih suka pendekatan yang lebih berprinsip dengan lebih banyak informasi latar belakang. Alih-alih menulis dokumen "Pisau Swiss Army", kami akan menerbitkan dua posting blog, satu untuk setiap kamp:
- Posting ini adalah kasus sederhana . Ini berfokus pada instruksi sederhana dan aplikasi yang lebih kecil dan merupakan cara termudah untuk memindahkan aplikasi Anda ke .NET Core.
- Kami akan menerbitkan posting lain untuk kasus yang lebih rumit . Posting ini akan lebih fokus pada aplikasi non-sepele, aplikasi WPF seperti dengan dependensi pada WCF dan paket UI pihak ketiga.
Jika Anda lebih suka menonton video daripada membaca, ini adalah video tempat saya melakukan semua yang dijelaskan di bawah ini.
Langkah 0 - Prasyarat
Untuk port aplikasi desktop Anda ke Core, Anda akan memerlukan .NET Core 3 dan Visual Studio 2019.
Langkah 1 - Jalankan analisa portabilitas
Sebelum porting, Anda harus memeriksa seberapa kompatibel aplikasi Anda dengan .NET Core. Untuk melakukannya, unduh dan jalankan .NET Portability Analyzer .
- Pada tab pertama, Ringkasan Portabilitas, jika Anda hanya memiliki 100% pada kolom .NET Core (semuanya disorot dalam warna hijau), kode Anda sepenuhnya kompatibel, lanjutkan ke Langkah 2.
- Jika Anda memiliki nilai kurang dari 100%, pertama-tama lihat semua rakitan yang bukan bagian dari aplikasi Anda. Untuk itu, periksa apakah penulisnya menyediakan versi untuk .NET Core atau .NET Standard.
- Sekarang lihat bagian lain dari rakitan yang berasal dari kode Anda. Jika Anda tidak memiliki salah satu majelis Anda yang tercantum dalam laporan portabilitas, lanjutkan ke Langkah 2. Jika demikian, buka tab Detail, filter tabel dengan mengklik Majelis kolom dan hanya fokus pada yang berasal dari aplikasi Anda. Berjalan daftar dan refactor kode Anda untuk berhenti menggunakan API atau mengganti penggunaan API dengan alternatif dari .NET Core.

Langkah 2 - Bermigrasi ke .csproj gaya SDK
Di Solution Explorer klik kanan pada proyek Anda (bukan pada solusi!). Apakah Anda melihat Edit File Proyek ? Jika ya, Anda sudah menggunakan file proyek bergaya SDK, jadi Anda harus pindah ke Langkah 3 . Jika tidak, lakukan hal berikut.
- Periksa di Solution Explorer jika proyek Anda berisi file paket.config. Jika tidak, tidak ada tindakan yang diperlukan, jika Anda melakukannya, klik kanan pada paket.config dan pilih Migrasi paket.config ke PackageReference . Kemudian klik OK .
- Buka file proyek Anda dengan mengklik kanan pada proyek dan pilih Unload Project . Kemudian klik kanan pada 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 Anda 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 teks yang baru saja Anda hapus, tempel kode berikut. Untuk aplikasi 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>
- Di Notepad, cari
PackageReference
. Jika Anda tidak menemukan apa pun, lanjutkan. Jika Anda menemukan PackageReference
, salin seluruh <ItemGroup>
yang berisi PackageReference
dalam file proyek Anda, dibuka di Visual Studio, tepat di bawah garis yang telah Anda tempel pada langkah di atas. Lakukan untuk setiap kemunculan PackageReference
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 tidak menemukan apa pun, lanjutkan. Jika Anda menemukan item 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 file proyek baru. Jadi untuk setiap ProjectReference
yang Anda temukan (jika ada), salin saja ItemGroup
dan ProjectReference
seperti ini.
<ItemGroup> <ProjectReference Include="..\WindowsFormsApp1\WindowsFormsApp1.csproj" /> </ItemGroup>
Simpan semuanya. Tutup file .csproj di Visual Studio. Klik kanan pada proyek Anda di Solution Explorer dan pilih Reload Project . Bangun kembali dan pastikan tidak ada kesalahan.
Berita bagus, Anda baru saja memperbarui file proyek ke gaya SDK baru! Proyek ini masih menargetkan .NET Framework, tetapi sekarang Anda akan dapat menargetkan ulang ke .NET Core.
Langkah 3 - Retarget ke .NET Core
Buka file proyek Anda dengan mengklik dua kali pada proyek Anda di Solution Explorer . Temukan properti <TargetFramework>
dan ubah nilainya menjadi netcoreapp3.0
. Sekarang file proyek Anda 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 porting ke .NET Core 3!
Memperbaiki kesalahan
Jika Anda mendapatkan 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 laporan portabilitas Anda berwarna hijau, seharusnya mudah diperbaiki dengan menambahkan paket NuGet dengan pustaka yang sesuai. Jika Anda tidak dapat menemukan paket NuGet dengan pustaka yang hilang, coba rujuk Microsoft.Windows.Compatibility . Paket ini menambahkan ~ 21K .NET API dari .NET Framework.
Bekerja dengan desainer
Meskipun dimungkinkan untuk mengedit antarmuka pengguna aplikasi Anda melalui kode, pengembang biasanya lebih suka menggunakan desainer visual. Dengan .NET Core, kami harus merancang ulang cara perancang bekerja dengan proyek .NET Core:
- Desainer WPF sudah dalam pratinjau dan kami sedang berupaya menambahkan lebih banyak fungsionalitas untuk itu.
- Desainer WinForms untuk .NET Core akan tersedia nanti, dan sementara itu di sana Anda dapat menggunakan desainer .NET Framework WinForms sebagai solusinya.
Berikut adalah bagaimana Anda dapat menggunakan desainer .NET Framework WinForms:
- Salin file .csproj Anda (misalkan Anda memiliki
MyProject.csproj
), berikan nama yang berbeda, misalnya MyProject.NetFramework.csproj
dan letakkan di sebelah file proyek yang ada. - Pastikan proyek Anda ditutup di Visual Studio, buka proyek baru
MyProject.NetFramework.csproj
.
Di Solution Explorer klik kanan pada proyek Anda dan pilih Properties . Di tab Aplikasi (harus terbuka secara default) setel nama Majelis dan namespace Default ke nilai yang sama seperti dalam proyek awal Anda (hapus ".NetFramework" dari nama-nama).
Simpan solusi ini di sebelah solusi yang ada. - Buka file proyek baru dan ubah
<TargetFramework>
ke net472
. - Sekarang ketika Anda perlu menggunakan perancang WinForms, muat proyek Anda dengan file proyek
MyProject.NetFramework.csproj
dan Anda akan mendapatkan pengalaman penuh perancang .NET Framework. Ketika Anda selesai dengan perancang, tutup dan buka proyek Anda dengan file proyek .NET Core. - Ini hanya solusi sampai desainer WinForms untuk .NET Core siap.
Mengapa port ke .NET Core
Lihat video di mana Scott Hunter dan saya berbicara tentang semua hal baru yang datang dengan .NET Core 3 Porting ke .NET Core 3.0 .