Gambaran umum port dari .NET Framework ke .NET
Artikel ini memberikan gambaran umum tentang apa yang harus Anda pertimbangkan saat memindahkan kode Anda dari .NET Framework ke .NET (sebelumnya bernama .NET Core). Porting ke .NET dari .NET Framework untuk banyak proyek relatif mudah. Kompleksitas proyek Anda menentukan berapa banyak pekerjaan yang akan Anda lakukan setelah migrasi awal file proyek.
Proyek tempat model aplikasi tersedia di .NET (seperti pustaka, aplikasi konsol, dan aplikasi desktop) biasanya memerlukan sedikit perubahan. Proyek yang memerlukan model aplikasi baru, seperti pindah ke ASP.NET Core dari ASP.NET, memerlukan lebih banyak pekerjaan. Banyak pola dari model aplikasi lama memiliki setara yang dapat digunakan selama konversi.
Banyak aplikasi yang dibuat untuk .NET Framework menggunakan teknologi desktop seperti Formulir Windows atau Windows Presentation Foundation (WPF). Baik Formulir Windows maupun WPF telah di-port ke .NET, tetapi teknologi ini tetap Windows-saja.
Pertimbangkan dependensi berikut sebelum Anda memigrasikan aplikasi Formulir Windows atau WPF:
- Project file untuk .NET menggunakan format yang berbeda dari .NET Framework.
- Proyek Anda dapat menggunakan API yang tidak tersedia di .NET.
- Kontrol dan pustaka pihak ketiga mungkin belum di-port ke .NET dan tetap hanya tersedia untuk .NET Framework.
- Proyek Anda menggunakan teknologi yang tidak lagi tersedia di .NET.
.NET menggunakan versi sumber terbuka dari Formulir Windows dan WPF dan mencakup penyempurnaan atas .NET Framework.
Untuk tutorial tentang memigrasikan aplikasi desktop Anda ke .NET 6, lihat salah satu artikel berikut ini:
- Migrasikan aplikasi WPF .NET Framework ke .NET
- Migrasikan aplikasi .NET Framework Formulir Windows ke .NET
Aplikasi masih dapat memanggil pustaka asli P/Invoke pada platform yang didukung oleh .NET. Teknologi ini tidak terbatas pada Windows. Namun, jika pustaka yang Anda referensikan bersifat khusus Windows, seperti user32.dll atau kernel32.dll, maka kode hanya berfungsi pada Windows. Untuk setiap platform yang Anda inginkan agar aplikasi berjalan, Anda harus menemukan versi khusus platform, atau membuat kode Anda cukup umum untuk dijalankan di semua platform.
Saat memindahkan aplikasi dari .NET Framework ke .NET, aplikasi Anda mungkin menggunakan pustaka yang disediakan didistribusikan dengan .NET Framework. Banyak API yang tersedia di .NET Framework tidak di-port ke .NET karena bergantung pada teknologi khusus Windows, seperti Windows Registry atau model gambar GDI+.
Paket Kompatibilitas Windows menyediakan sebagian besar permukaan API .NET Framework ke .NET dan disediakan melalui Microsoft.Windows. Paket Kompatibilitas NuGet.
Untuk informasi selengkapnya, lihat Menggunakan Paket Kompatibilitas Windows untuk kode port ke .NET.
Mode kompatibilitas .NET Framework diperkenalkan dalam .NET Standard 2.0. Mode kompatibilitas ini memungkinkan proyek .NET Standard dan .NET 5+ (dan .NET Core 3.1) mereferensikan pustaka .NET Framework hanya Windows. Mereferensikan pustaka .NET Framework tidak berfungsi untuk semua proyek, seperti jika pustaka menggunakan API Windows Presentation Foundation (WPF), tetapi tidak memblokir banyak skenario porting. Untuk informasi selengkapnya, lihat Menganalisis dependensi Anda ke kode port dari .NET Framework ke .NET.
Ada beberapa teknologi dalam .NET Framework yang tidak ada di .NET:
-
Membuat domain aplikasi tambahan tidak didukung. Untuk isolasi kode, gunakan proses atau kontainer terpisah sebagai alternatif.
-
Jarak jauh digunakan untuk berkomunikasi di seluruh domain aplikasi, yang tidak lagi didukung. Untuk komunikasi sederhana di seluruh proses, pertimbangkan mekanisme komunikasi antar proses (IPC) sebagai alternatif untuk jarak jauh, seperti System.IO.Pipes kelas atau MemoryMappedFile kelas . Untuk skenario yang lebih kompleks, pertimbangkan kerangka kerja seperti StreamJsonRpc atau ASP.NET Core (baik menggunakan layanan API Web gRPC atau RESTful).
-
CAS adalah teknik kotak pasir yang didukung oleh .NET Framework tetapi tidak digunakan lagi di .NET Framework 4.0. Ini digantikan oleh Transparansi Keamanan dan tidak didukung di .NET. Sebagai gantinya, gunakan batas keamanan yang disediakan oleh sistem operasi, seperti virtualisasi, kontainer, atau akun pengguna.
-
Mirip dengan CAS, teknik sandboxing ini tidak lagi direkomendasikan untuk aplikasi .NET Framework dan tidak didukung di .NET. Sebagai gantinya, gunakan batas keamanan yang disediakan oleh sistem operasi, seperti virtualisasi, kontainer, atau akun pengguna.
-
System.EnterpriseServices (COM+) tidak didukung di .NET.
Windows Workflow Foundation (WF)
WF tidak didukung di .NET 5+ (termasuk .NET Core). Untuk alternatif, lihat CoreWF.
Untuk informasi selengkapnya tentang teknologi yang tidak didukung ini, lihat .NET Framework teknologi yang tidak tersedia di .NET Core dan .NET 5+.
.NET (sebelumnya dikenal sebagai .NET Core) dirancang untuk menjadi lintas platform. Jika kode Anda tidak bergantung pada teknologi khusus Windows, kode tersebut dapat berjalan di platform lain seperti macOS, Linux, dan Android. Ini termasuk jenis proyek seperti:
- Pustaka
- Alat berbasis konsol
- Automation
- situs ASP.NET
.NET Framework adalah komponen khusus Windows. Saat kode Anda menggunakan teknologi atau API khusus Windows, seperti Formulir Windows dan Windows Presentation Foundation (WPF), kode masih dapat berjalan di .NET tetapi tidak akan berjalan pada sistem operasi lain.
Ada kemungkinan bahwa pustaka atau aplikasi berbasis konsol Anda dapat digunakan lintas platform tanpa banyak berubah. Saat melakukan porting ke .NET, Anda mungkin ingin mempertimbangkan hal ini dan menguji aplikasi Anda di platform lain.
.NET Standard adalah spesifikasi formal dari API .NET yang tersedia pada beberapa implementasi .NET. Motivasi di balik .NET Standard adalah untuk membangun keseragaman yang lebih besar dalam ekosistem .NET. Dimulai dengan .NET 5, pendekatan yang berbeda untuk membangun keseragaman telah diadopsi, dan pendekatan baru ini menghilangkan kebutuhan akan .NET Standard dalam banyak skenario. Untuk informasi selengkapnya, lihat .NET 5 dan .NET Standard.
.NET Standard 2.0 adalah versi terakhir yang mendukung .NET Framework.
Alih-alih memindahkan aplikasi secara manual dari .NET Framework ke .NET, Anda dapat menggunakan alat yang berbeda untuk membantu mengotomatiskan beberapa aspek migrasi. Port proyek yang kompleks adalah, dengan sendirinya, proses yang kompleks. Alat-alat ini dapat membantu dalam perjalanan itu.
Bahkan jika Anda menggunakan alat untuk membantu memindahkan aplikasi, Anda harus meninjau bagian Pertimbangan saat memindahkan di artikel ini.
Asisten Peningkatan .NET adalah alat baris perintah yang dapat dijalankan di berbagai jenis aplikasi .NET Framework. Ini dirancang untuk membantu meningkatkan aplikasi .NET Framework ke .NET 5. Setelah menjalankan alat, dalam banyak kasus, aplikasi akan memerlukan lebih banyak upaya untuk menyelesaikan migrasi. Alat ini mencakup penginstalan penganalisis yang dapat membantu menyelesaikan migrasi. Alat ini bekerja pada jenis aplikasi .NET Framework berikut:
- Formulir Windows
- WPF
- ASP.NET MVC
- Konsol
- Pustaka kelas
Alat ini menggunakan alat lain yang tercantum dalam artikel ini dan memandu proses migrasi. Untuk informasi selengkapnya tentang alat ini, lihat Gambaran Umum Asisten Peningkatan .NET.
Alat coba-konversi adalah alat global .NET yang dapat mengonversi proyek atau seluruh solusi ke .NET SDK, termasuk memindahkan aplikasi desktop ke .NET 5. Namun, alat ini tidak disarankan jika proyek Anda memiliki proses build yang rumit seperti tugas kustom, target, atau impor.
Untuk informasi selengkapnya, lihat repositori GitHub coba konversi.
.NET Portability Analyzer adalah alat yang menganalisis rakitan dan menyediakan laporan terperinci tentang API .NET yang hilang agar aplikasi atau pustaka portabel pada platform .NET yang anda targetkan.
Untuk menggunakan .NET Portability Analyzer di Visual Studio, instal ekstensi dari marketplace.
Untuk informasi selengkapnya, lihat .NET Portability Analyzer.
Penganalisis kompatibilitas Platform menganalisis apakah Anda menggunakan API yang akan melemparkan PlatformNotSupportedException pada durasi atau tidak. Meskipun ini tidak umum jika Anda pindah dari .NET Framework 4.7.2 atau yang lebih tinggi, ada baiknya untuk memeriksanya. Untuk informasi selengkapnya tentang API yang melempar pengecualian di .NET, lihat API yang selalu melemparkan pengecualian pada .NET Core.
Untuk informasi selengkapnya, lihat Penganalisis kompatibilitas platform.
Saat memindahkan aplikasi Anda ke .NET, pertimbangkan saran berikut secara berurutan.
✔️ PERTIMBANGKAN menggunakan Asisten Peningkatan .NET untuk memigrasikan proyek Anda. Meskipun alat ini dalam pratinjau, alat ini mengotomatiskan sebagian besar langkah manual yang dirinci dalam artikel ini dan memberi Anda titik awal yang bagus untuk melanjutkan jalur migrasi Anda.
✔️ PERTIMBANGKAN untuk memeriksa dependensi Anda terlebih dahulu. Dependensi Anda harus menargetkan .NET 5, .NET Standard, atau .NET Core.
✔️ DO bermigrasi dari file NuGetpackages.config ke PackageReference pengaturan dalam file proyek. Gunakan Visual Studio untuk mengonversi package.config file.
✔️ PERTIMBANGKAN untuk memutakhirkan ke format file proyek terbaru meskipun Anda belum dapat memindahkan aplikasi Anda. .NET Framework proyek menggunakan format proyek yang sudah kedaluarsa. Meskipun format proyek terbaru, yang dikenal sebagai proyek gaya SDK, dibuat untuk .NET Core dan seterusnya, mereka bekerja dengan .NET Framework. Memiliki file proyek Anda dalam format terbaru memberi Anda dasar yang baik untuk memindahkan aplikasi Anda di masa mendatang.
✔️ Lakukan penargetan ulang proyek .NET Framework Anda ke setidaknya .NET Framework 4.7.2. Ini memastikan ketersediaan alternatif API terbaru untuk kasus di mana .NET Standard tidak mendukung API yang ada.
✔️ PERTIMBANGKAN untuk menargetkan .NET 5 alih-alih .NET Core 3.1. Sementara .NET Core 3.1 berada di bawah dukungan jangka panjang (LTS), .NET 5 adalah yang terbaru dan .NET 6 akan menjadi LTS saat dirilis.
✔️ DO menargetkan .NET 5 untuk proyek Formulir Windows dan WPF. .NET 5 berisi banyak peningkatan untuk aplikasi Desktop.
✔️ PERTIMBANGKAN untuk menargetkan .NET Standard 2.0 jika Anda memigrasikan pustaka yang juga dapat digunakan dengan proyek .NET Framework. Anda juga dapat melakukan multitarget pustaka, menargetkan .NET Framework dan .NET Standard.
✔️ TAMBAHKAN referensi ke Microsoft.Windows. Paket Kompatibilitas NuGet jika, setelah bermigrasi, Anda mendapatkan kesalahan API yang hilang. Sebagian besar permukaan API .NET Framework tersedia untuk .NET melalui paket NuGet.