Bagikan melalui


Gambaran umum porting dari .NET Framework ke .NET

Artikel ini memberikan gambaran umum tentang apa yang harus Anda pertimbangkan saat mentransfer kode Anda dari .NET Framework ke .NET (sebelumnya bernama .NET Core). Porting ke .NET dari .NET Framework relatif mudah untuk banyak proyek. Kompleksitas proyek Anda menentukan berapa banyak pekerjaan yang perlu 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.

Teknologi desktop Windows

Banyak aplikasi yang dibuat untuk .NET Framework menggunakan teknologi desktop seperti Windows Forms atau Windows Presentation Foundation (WPF). Formulir Windows dan WPF tersedia di .NET, tetapi tetap memiliki teknologi khusus Windows.

Pertimbangkan dependensi berikut sebelum Anda memigrasikan aplikasi Windows Forms atau WPF:

  • File proyek untuk .NET menggunakan format yang berbeda dari .NET Framework.
  • Proyek Anda mungkin menggunakan API yang tidak tersedia di .NET.
  • Kontrol dan pustaka pihak ketiga mungkin belum di-port ke .NET dan hanya tersedia untuk .NET Framework.
  • Proyek Anda menggunakan teknologi yang tidak lagi tersedia di .NET.

.NET menggunakan versi sumber terbuka Windows Forms dan WPF dan menyertakan penyempurnaan melalui .NET Framework.

Untuk tutorial tentang memigrasikan aplikasi desktop Anda ke .NET, lihat salah satu artikel berikut ini:

API khusus Windows

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 rujuk khusus Windows, seperti user32.dll atau kernel32.dll, maka kode hanya berfungsi di Windows. Untuk setiap platform yang Anda inginkan untuk dijalankan aplikasi, Anda harus menemukan versi khusus platform, atau membuat kode Anda cukup umum untuk dijalankan di semua platform.

Saat Anda mentransfer aplikasi dari .NET Framework ke .NET, aplikasi Anda mungkin menggunakan pustaka yang disediakan oleh .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 .NET Framework API ke .NET dan disediakan melalui paket NuGet Microsoft.Windows.Compatibility.

Untuk informasi selengkapnya, lihat Menggunakan Paket Kompatibilitas Windows untuk kode port ke .NET.

Mode kompatibilitas .NET Framework

Mode kompatibilitas .NET Framework diperkenalkan dalam .NET Standard 2.0. Mode kompatibilitas memungkinkan proyek .NET Standard dan .NET untuk mereferensikan pustaka .NET Framework seolah-olah dikompilasi untuk kerangka kerja target proyek. Namun, beberapa implementasi .NET mungkin mendukung potongan .NET Framework yang lebih besar daripada yang lain. Misalnya, .NET Core 3.0 memperluas mode kompatibilitas .NET Framework ke Windows Forms dan WPF. Mereferensikan pustaka .NET Framework tidak berfungsi untuk semua proyek, seperti jika pustaka menggunakan API WPF, tetapi tidak memblokir banyak skenario porting. Untuk informasi selengkapnya, lihat Menganalisis dependensi Anda ke kode port dari .NET Framework ke .NET.

Mereferensikan pustaka .NET Framework tidak berfungsi dalam semua kasus, karena bergantung pada API .NET Framework mana yang digunakan dan apakah API ini didukung oleh kerangka kerja target proyek atau tidak. Selain itu, beberapa API .NET Framework hanya akan berfungsi di Windows. Mode kompatibilitas .NET Framework memungkinkan banyak skenario porting, tetapi Anda harus menguji proyek Anda untuk memastikan bahwa mereka juga berfungsi saat dijalankan. Untuk informasi selengkapnya, lihat Analisis dependensi Anda untuk memigrasikan kode dari .NET Framework ke.

Perubahan kerangka kerja target dalam proyek bergaya SDK

Seperti yang disebutkan sebelumnya, file proyek untuk .NET menggunakan format yang berbeda dari .NET Framework, yang dikenal sebagai format proyek bergaya SDK. Bahkan jika Anda tidak berpindah dari .NET Framework ke .NET, Anda masih harus meningkatkan file proyek ke format terbaru. Cara menentukan kerangka kerja target berbeda dalam proyek bergaya SDK. Di .NET Framework, <TargetFrameworkVersion> properti digunakan dengan moniker yang menentukan versi .NET Framework. Misalnya, .NET Framework 4.7.2 terlihat seperti cuplikan berikut:

<PropertyGroup>
  <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
</PropertyGroup>

Proyek bergaya SDK menggunakan properti yang berbeda untuk mengidentifikasi kerangka kerja target, <TargetFramework> properti . Saat menargetkan .NET Framework, moniker dimulai dengan net dan berakhir dengan versi .NET Framework tanpa periode apa pun. Misalnya, moniker untuk menargetkan .NET Framework 4.7.2 adalah net472:

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>
</PropertyGroup>

Untuk daftar semua moniker target, lihat Kerangka kerja target dalam proyek bergaya SDK.

Teknologi yang tidak tersedia

Ada beberapa teknologi dalam .NET Framework yang tidak ada di .NET:

  • Bidang aplikasi

    Membuat domain aplikasi tambahan tidak didukung. Untuk isolasi kode, gunakan proses atau kontainer terpisah sebagai alternatif.

  • Jarak Jauh

    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 kelas System.IO.Pipes atau kelas MemoryMappedFile. Untuk skenario yang lebih kompleks, pertimbangkan kerangka kerja seperti StreamJsonRpc atau ASP.NET Core (baik menggunakan layanan API Web gRPC atau RESTful).

    Karena penerusan tidak didukung, panggilan ke BeginInvoke() dan EndInvoke() pada objek delegasi akan memicu PlatformNotSupportedException.

  • Keamanan akses kode (CAS)

    CAS adalah teknik sandboxing yang didukung oleh .NET Framework tetapi tidak digunakan lagi dalam .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.

  • Transparansi keamanan

    Mirip dengan CAS, teknik sandboxing transparansi keamanan 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

    System.EnterpriseServices (COM+) tidak didukung di .NET.

  • Windows Workflow Foundation (WF)

    WF tidak didukung di .NET. Untuk alternatif, lihat CoreWF.

Untuk informasi selengkapnya tentang teknologi yang tidak didukung ini, lihat Teknologi .NET Framework tidak tersedia di .NET 6+.

Lintas perangkat

.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. Kode tersebut mencakup jenis proyek seperti:

  • Perpustakaan
  • Alat berbasis konsol
  • Otomatisasi
  • situs ASP.NET

.NET Framework adalah komponen khusus Windows. Ketika kode Anda menggunakan teknologi atau API khusus Windows, seperti Windows Forms dan WPF, kode masih dapat berjalan pada .NET tetapi tidak berjalan pada sistem operasi lain.

Ada kemungkinan bahwa pustaka atau aplikasi berbasis konsol Anda dapat digunakan lintas platform tanpa banyak berubah. Saat Anda mentransfer ke .NET, Anda mungkin ingin mempertimbangkan hal ini dan menguji aplikasi Anda di platform lain.

Masa depan .NET Standard

.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.

Alat untuk membantu porting

Alih-alih memindahkan aplikasi secara manual dari .NET Framework ke .NET, Anda dapat menggunakan alat yang berbeda untuk membantu mengotomatiskan beberapa aspek migrasi. Mem-porting proyek yang kompleks adalah proses yang rumit dengan sendirinya. Alat-alat mungkin membantu dalam perjalanan itu.

Bahkan jika Anda menggunakan alat untuk membantu memindahkan aplikasi, Anda harus meninjau bagian Pertimbangan saat porting di artikel ini.

Asisten Peningkatan .NET

Asisten Peningkatan .NET adalah alat baris perintah yang dapat dijalankan pada berbagai jenis aplikasi .NET Framework. Ini dirancang untuk membantu meningkatkan aplikasi .NET Framework ke .NET. Setelah menjalankan alat, dalam kebanyakan kasus aplikasi akan memerlukan lebih banyak upaya untuk menyelesaikan migrasi. Alat ini mencakup penginstalan penganalisis yang dapat membantu menyelesaikan migrasi. Alat ini berfungsi pada jenis aplikasi .NET Framework berikut:

  • Formulir Windows
  • WPF (Windows Presentation Foundation)
  • ASP.NET MVC
  • Konsol
  • Pustaka kelas

Alat ini menggunakan alat lain yang tercantum dalam artikel ini, seperti coba konversi, dan memandu proses migrasi. Untuk informasi selengkapnya tentang alat ini, lihat Gambaran Umum Asisten Peningkatan .NET.

try-convert

Alat ini try-convert adalah alat global .NET yang dapat mengonversi proyek atau seluruh solusi ke .NET SDK, termasuk memindahkan aplikasi desktop ke .NET. Namun, alat ini tidak disarankan jika proyek Anda memiliki proses build yang rumit seperti tugas kustom, target, atau impor.

Untuk informasi selengkapnya, lihat try-convert repositori GitHub.

Penganalisis kompatibilitas platform

Penganalisis kompatibilitas Platform menganalisis apakah Anda menggunakan API yang melemparkan PlatformNotSupportedException pada waktu proses atau tidak. Meskipun menemukan salah satu API ini tidak mungkin jika Anda berpindah dari .NET Framework 4.7.2 atau yang lebih tinggi, ada baiknya untuk memeriksanya. Untuk informasi selengkapnya tentang API yang melemparkan pengecualian pada .NET, lihat API yang selalu melemparkan pengecualian pada .NET Core.

Untuk informasi selengkapnya, lihat Penganalisis kompatibilitas platform.

Pertimbangan saat porting

Saat memindahkan aplikasi Anda ke .NET, pertimbangkan saran berikut secara berurutan:

✔️ PERTIMBANGKAN untuk menggunakan Asisten Peningkatan .NET dalam 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, .NET Standard, atau .NET Core.

✔️ DO lakukan migrasi dari file NuGetpackages.config ke pengaturan dalam file proyek. Gunakan Visual Studio untuk mengonversi package.config file.

✔️ PERTIMBANGKAN untuk meningkatkan ke format file proyek terbaru meskipun Anda belum dapat mem-port aplikasi Anda. Proyek .NET Framework menggunakan format proyek yang sudah kedaluarsa. Meskipun format proyek terbaru, yang dikenal sebagai proyek bergaya SDK, dibuat untuk .NET Core dan seterusnya, format ini juga berfungsi dengan .NET Framework. Memiliki file proyek Anda dalam format terbaru memberi Anda dasar yang baik untuk memindahkan aplikasi Anda di masa mendatang.

✔️ LAKUKAN mengubah target 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 8, yang merupakan rilis dukungan jangka panjang (LTS).

✔️ DO menargetkan .NET 6+ untuk proyek Windows Forms dan WPF . .NET 6 dan versi yang lebih baru berisi banyak peningkatan untuk aplikasi Desktop.

✔️ PERTIMBANGKAN untuk menargetkan .NET Standard 2.0 jika Anda memigrasikan pustaka yang mungkin juga digunakan dengan proyek .NET Framework. Anda juga dapat melakukan multitarget pustaka Anda, yang menargetkan .NET Framework dan .NET Standard.

✔️ TAMBAHKAN referensi ke paket NuGet Microsoft.Windows.Compatibility jika, setelah bermigrasi, Anda mendapatkan kesalahan API yang tidak ditemukan. Sebagian besar permukaan .NET Framework API tersedia untuk .NET melalui paket NuGet.

Lihat juga