Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 2833|Jawab: 1

[Inti .NET] .NET/C# mengimplementasikan pembaruan panas plugin DLL berdasarkan AssemblyLoadContext

[Salin tautan]
Dipaparkan pada 2024-6-28 14:28:33 | | | |
Persyaratan: Logika bisnis kompleks dan memerlukan penyesuaian, dan untuk logika tersebut, dalam rakitan DLL terpisah, latar belakang dapat memperbarui rakitan secara dinamis dan menjalankan logika terbaru.

.NET Core tidak mendukung pembuatan dan pembongkaran dinamis AppDomains seperti .NET Framework, jadi tidak pernah ada cara yang baik untuk mem-hotload plugin, tetapi kabar baiknya adalah .NET Core telah mendukung Collectible Assembly sejak 3.0, dan kita dapat membuat AssemblyLoadContext yang dapat direklamasi yang dapat kita gunakan untuk memuat dan membongkar rakitan.

AssemblyLoadContext:Login hyperlink terlihat.

Pertama, buat konsol baru dan tiga pustaka, yaitu:Aplikasi Konsol6Perpustakaan KelasStandarPerpustakaan Kelas1Perpustakaan Kelas2, di antaranya pustaka ClassLibrary1 dan ClassLibrary2 mewarisi antarmuka IWorker di ClassLibraryStandard dan mengimplementasikan metode Run.

Kode ClassLibraryStandard:

Kode ClassLibrary1:

Kode ClassLibrary2:

Kode konsol ConsoleApp6 adalah sebagai berikut:

Konsol membuka metode Run dari 3 utas di plugin DLL yang terus-menerus dijalankan secara dinamis, dan menggunakan log4net untuk merekam hasil output, lalu menjalankannya di konsolGanti DLL dengan library terbaru setelah 3 detik

Setelah menjalankan konsol selama 1 detik atau 5 detik, kumpulan instans AssemblyLoadContext saat ini dikeluarkan, yang merupakan pustaka DLL yang dimuat.

Seperti yang ditunjukkan di bawah ini:



Anda dapat melihat bahwa program tidak memiliki output yang tidak normal, dan tidak ada situasi di mana plugin tidak dapat ditemukan selama proses eksekusi. Alasan mengapa log4net mencatat hasil eksekusi adalah karena konsol diblokir, dan untuk memastikan bahwa 3 utas dapat dieksekusi terus menerus, log4net digunakan untuk merekam hasil eksekusi, seperti yang ditunjukkan pada gambar di bawah ini:



2024-06-28 14:24:36,606 INFO 11 Bergulir-bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Mulai menghapus instalan
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 11 Bergulir-bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 11 Bergulir-bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 10 Bergulir-bergulir - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,606 INFO 13 Bergulir-bergulir - 1
...
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,607 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Copot pemasangan selesai
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
...
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,607 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,607 INFO 13 Bergulir-bergulir - 1
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulirFile - 1
2024-06-28 14:24:36,606 INFO 11 Bergulir-bergulir-bergulir - 1
2024-06-28 14:24:36,607 INFO 13 Bergulir-bergulir - 2
2024-06-28 14:24:36,607 INFO 12 Bergulir-bergulir - 2

Konfigurasi config.xml terlampir:

(Akhir)




Mantan:Tentang tingkat toleransi kesalahan kode QR QR
Depan:.NET/C# menggunakan PDFsharp untuk menggabungkan beberapa file PDF menjadi satu
 Tuan tanah| Dipaparkan pada 2024-7-6 16:59:30 |
Gunakan Roslyn untuk mengkompilasi kode C# secara dinamis dan menjalankannya
https://www.itsvse.com/thread-10786-1-1.html
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com