Mulai menggunakan ASP.NET inkremental untuk ASP.NET migrasi Core

Important

Sebelum memulai: Artikel ini mengasumsikan Anda telah membaca ringkasan migrasi inti ASP.NET. Jika Anda belum membacanya, silakan mulai di sana untuk memahami konsep, pendekatan, dan manfaat migrasi inkremental.

Untuk migrasi besar, sebaiknya siapkan aplikasi ASP.NET Core yang berproksi ke aplikasi .NET Framework asli. Aplikasi proksi baru yang diaktifkan ditampilkan dalam gambar berikut:

mulai memigrasikan rute

Artikel ini menyediakan langkah-langkah praktis untuk melanjutkan migrasi bertahap setelah Anda memahami pendekatan.

Prerequisites

Sebelum memulai migrasi inkremental, pastikan Anda memiliki:

  1. Baca gambaran umum: ASP.NET inkremental ke migrasi inti ASP.NET
  2. Aplikasi ASP.NET Framework yang berfungsi yang ingin Anda migrasikan
  3. Visual Studio 2022 dengan pembaruan terbaru
  4. .NET 8 atau SDK yang lebih baru terinstal
  5. Memahami dependensi aplikasi dan pustaka pihak ketiga Anda

Gambaran Umum Langkah Migrasi

Proses migrasi inkremental mengikuti langkah-langkah utama berikut:

  1. Menyiapkan ASP.NET Core Project
  2. Remediasi Utang Teknis
  3. Mengidentifikasi dan mengatasi permasalahan lintas-sektor
  4. Meningkatkan pustaka pendukung

Menyiapkan ASP.NET Core Project

Langkah pertama adalah membuat aplikasi ASP.NET Core baru yang akan berfungsi sebagai proksi Anda.

Apa yang akan Anda lakukan:

  • Buat proyek ASP.NET Core baru bersama aplikasi kerangka kerja ASP.NET yang sudah ada
  • Konfigurasikan permintaan untuk proksi ke aplikasi asli Anda menggunakan YARP (Yet Another Reverse Proxy)
  • Menyiapkan infrastruktur dasar untuk migrasi bertahap

Instruksi terperinci:

Mengatasi Utang Teknis

Kapan harus melakukan langkah ini: Sebelum meningkatkan pustaka pendukung apa pun, atasi utang teknis yang dapat mempersulit proses migrasi.

Sebelum Anda mulai memperbarui pustaka pendukung, penting untuk membersihkan utang teknis yang dapat mengganggu proses migrasi. Langkah ini harus diselesaikan terlebih dahulu untuk memastikan pengalaman peningkatan yang lebih lancar.

Memperbarui Ketergantungan Paket

Tinjau dan perbarui paket NuGet Anda ke versi terbaru yang kompatibel:

  1. Mengaudit paket yang ada: Gunakan Manajer Paket NuGet Visual Studio karena dotnet CLI tidak berfungsi untuk aplikasi ASP.NET Framework
  2. Memperbarui paket secara bertahap: Memperbarui paket satu per satu untuk menghindari masalah kompatibilitas
  3. Uji setelah setiap pembaruan: Pastikan aplikasi Anda masih berfungsi dengan benar setelah setiap pembaruan paket
  4. Perubahan yang merusak kompatibilitas: Beberapa pembaruan paket mungkin memperkenalkan perubahan yang perlu ditangani.

Modernisasikan Alat Pembangun

Perbarui alat build dan konfigurasi proyek Anda:

  1. Alat pembaruan: Pastikan Anda menggunakan versi MSBuild/Visual Studio terbaru
  2. Bermigrasi ke PackageReference untuk dependensi: Pertimbangkan untuk bermigrasi dari packages.config ke PackageReference format jika Anda belum berada dalam proyek aplikasi Web
  3. Membersihkan referensi yang tidak digunakan: Menghapus referensi rakitan atau paket NuGet yang tidak digunakan
  4. Migrasikan ke file proyek bergaya SDK: Konversikan file proyek yang ada ke format gaya SDK modern. Ini penting untuk kompatibilitas dengan proyek .NET modern dan memberikan dukungan alat yang lebih baik
  5. Memperbarui skrip build: Meninjau dan memperbarui skrip build kustom atau konfigurasi CI/CD apa pun

Masalah Kualitas Kode Alamat

Perbaiki masalah kualitas kode yang diketahui yang dapat mempersulit migrasi:

  1. Memperbaiki peringatan kompilator: Atasi peringatan pengkompilasi apa pun, terutama yang terkait dengan API yang tidak digunakan lagi
  2. Menghapus kode mati: Membersihkan kelas, metode, dan elemen kode lainnya yang tidak digunakan
  3. Memperbarui penggunaan API yang tidak digunakan lagi: Ganti penggunaan API yang tidak digunakan lagi dengan setara modernnya jika memungkinkan

Pekerjaan persiapan ini akan membuat proses peningkatan pustaka jauh lebih lancar dan mengurangi kemungkinan mengalami masalah kompleks selama migrasi.

Mengidentifikasi dan mengatasi masalah lintas-fungsi

Kapan harus melakukan langkah ini: Saat menangani utang teknologi tetapi sebelum meningkatkan pustaka pendukung, identifikasi dan konfigurasikan aspek lintas fungsi yang memengaruhi seluruh aplikasi Anda.

Kekhawatiran lintas tingkat adalah aspek aplikasi Anda yang mencakup beberapa lapisan atau komponen, seperti autentikasi, pengelolaan sesi, pencatatan, dan penyimpan sementara. Ini perlu ditangani di awal proses migrasi karena memengaruhi bagaimana aplikasi ASP.NET Framework dan ASP.NET Core Anda berkomunikasi dan berbagi status selama migrasi inkremental.

Bagian berikut mencakup masalah lintas sektoral yang paling umum. Konfigurasikan hanya yang berlaku untuk aplikasi Anda:

Konfigurasi Dukungan untuk Sesi

Konfigurasikan ini jika: Aplikasi ASP.NET Framework Anda menggunakan status sesi.

Lihat dokumentasi migrasi sesi umum untuk panduan di sini.

Sesi adalah fitur ASP.NET yang umum digunakan yang berbagi nama dengan fitur di ASP.NET Core, tetapi API jauh berbeda. Saat memutakhirkan pustaka yang menggunakan status sesi, Anda harus mengonfigurasi dukungan sesi. Lihat dokumentasi tentang dukungan sesi jarak jauh untuk panduan terperinci tentang cara mengaktifkan berbagi status sesi antara aplikasi Anda.

Konfigurasi Autentikasi

Konfigurasikan ini jika: Aplikasi ASP.NET Framework Anda menggunakan autentikasi dan Anda ingin berbagi status autentikasi antara aplikasi lama dan baru.

Lihat dokumentasi migrasi autentikasi umum untuk panduan di sini.

Dimungkinkan untuk berbagi autentikasi antara aplikasi ASP.NET asli dan aplikasi ASP.NET Core baru dengan menggunakan fitur autentikasi jarak jauh adaptor System.Web. Fitur ini memungkinkan aplikasi ASP.NET Core untuk menungguhkan autentikasi ke aplikasi ASP.NET asli. Lihat dokumentasi tentang autentikasi jarak jauh untuk detail selengkapnya.

Kepedulian Lintas Fungsi Lainnya yang Perlu Dipertimbangkan

Bergantung pada aplikasi Anda, Anda mungkin juga perlu mengatasi:

  • Pengelogan: Pastikan pengelogan yang konsisten di kedua aplikasi. Pertimbangkan untuk menggunakan penyedia pengelogan bersama atau memastikan log dikumpulkan dengan benar.
  • Penggunaan Cache: Jika aplikasi Anda menggunakan cache (dalam memori, terdistribusi, atau penggunaan cache output), rencanakan bagaimana mempertahankan konsistensi cache antara aplikasi.
  • Penanganan Kesalahan: Menetapkan penanganan dan pelaporan kesalahan yang konsisten di seluruh aplikasi ASP.NET Framework dan ASP.NET Core.
  • Manajemen Konfigurasi: Rencanakan bagaimana pengaturan konfigurasi akan dibagikan atau dikelola di antara kedua aplikasi.
  • Pemantauan Kesehatan: Menyiapkan pemantauan dan pemeriksaan kesehatan untuk kedua aplikasi selama proses migrasi.
  • Injeksi Dependensi: Jika menggunakan kontainer DI di aplikasi ASP.NET Framework Anda, rencanakan migrasi ke kontainer DI bawaan ASP.NET Core.

Meningkatkan pustaka pendukung

Kapan harus melakukan langkah ini: Hanya ketika Anda perlu memigrasikan rute tertentu yang bergantung pada pustaka kelas yang berisi logika bisnis, Anda harus berbagi antara aplikasi lama dan baru.

Note

Pendekatan bertahap: Dengan proses migrasi bertahap, Anda tidak perlu memutakhirkan semua pustaka pendukung sekaligus. Anda hanya perlu memutakhirkan pustaka yang diperlukan untuk rute tertentu yang saat ini Anda migrasikan. Ini memungkinkan Anda untuk mengatasi migrasi dalam potongan-potongan yang lebih kecil dan lebih mudah dikelola.

Proses Peningkatan Pustaka

Important

Pustaka pendukung harus ditingkatkan dalam urutan pencarian mengutamakan kedalaman postorder. Ini berarti:

  1. Mulailah dengan dependensi daun: Mulailah dengan pustaka yang tidak memiliki dependensi pada pustaka lain dalam solusi Anda
  2. Bekerja ke atas melalui pohon dependensi: Hanya tingkatkan pustaka setelah semua dependensinya berhasil ditingkatkan
  3. Akhiri dengan aplikasi utama: Aplikasi ASP.NET Framework utama harus menjadi item terakhir yang akan dimodifikasi

Pemesanan ini sangat penting karena:

  • Ini memastikan bahwa ketika Anda meningkatkan pustaka, semua dependensinya sudah kompatibel
  • Ini mencegah masalah dependensi melingkar selama proses peningkatan
  • Ini memungkinkan Anda untuk menguji setiap pustaka secara independen sebelum pindah ke dependennya

CATATAN: Anda hanya perlu mengikuti urutan ini untuk subset pustaka yang diperlukan oleh rute yang saat ini Anda migrasikan, bukan seluruh solusi Anda.

Proses peningkatan untuk setiap pustaka:

Jika Anda memiliki pustaka pendukung dalam solusi yang perlu Anda gunakan untuk rute yang Anda migrasikan, pustaka tersebut harus ditingkatkan ke .NET Standard 2.0, jika memungkinkan. Modernisasi aplikasi GitHub Copilot dapat membantu Anda dengan ini. Jika pustaka tidak dapat menargetkan .NET Standard, Anda dapat menargetkan .NET 8 atau versi yang lebih baru, baik pada proyek asli bersama target .NET Framework atau pada proyek baru yang berjalan seiring dengan proyek asli.

System.Web adapter dapat digunakan dalam pustaka ini untuk mengaktifkan dukungan penggunaan HttpContext di pustaka kelas. Untuk mengaktifkan HttpContext penggunaan di pustaka:

  1. Hapus referensi ke System.Web dalam file proyek
  2. Microsoft.AspNetCore.SystemWebAdapters Menambahkan paket
  3. Aktifkan penargetan ganda dan tambahkan target .NET 8 atau lebih baru, atau konversikan proyek ke .NET Standard 2.0.

Langkah ini mungkin memerlukan sejumlah proyek untuk berubah tergantung pada struktur solusi Anda dan rute mana yang Anda migrasikan. Modernisasi aplikasi GitHub Copilot dapat membantu Anda mengidentifikasi mana yang perlu diubah dan mengotomatiskan sejumlah langkah dalam proses.

Langkah Selanjutnya

Setelah Anda menyelesaikan langkah-langkah penyetelan dan peningkatan pustaka di atas:

  1. Mulai dari yang kecil: Mulailah dengan memigrasikan titik akhir sederhana tanpa status terlebih dahulu
  2. Uji secara menyeluruh: Pastikan setiap komponen yang dimigrasikan berfungsi dengan benar di kedua lingkungan
  3. Memantau performa: Amati dampak performa apa pun dari penyiapan proksi
  4. Iterasi: Lanjutkan migrasi komponen secara bertahap hingga migrasi selesai