Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 2833|Відповідь: 1

[.NET Core] .NET/C# реалізує гарячі оновлення плагіна DLL на основі AssemblyLoadContext

[Копіювати посилання]
Опубліковано 2024-6-28 14:28:33 | | | |
Вимоги: Бізнес-логіка є складною і потребує налаштування, і для такої логіки в окремій DLL-асамблеї фон може динамічно оновлювати асемблер і виконувати останню логіку.

.NET Core не підтримує динамічне створення та видалення AppDomains, як .NET Framework, тому ніколи не було хорошого способу hotload плагінів, але хороша новина в тому, що .NET Core підтримує Collectible Assembly з версії 3.0, і ми можемо створити відновлюваний AssemblyLoadContext, який можна використовувати для завантаження та розвантаження асемблерів.

Клас AssemblyLoadContext:Вхід за гіперпосиланням видно.

Спочатку створити нову консоль і три бібліотеки, а саме:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, серед яких бібліотеки ClassLibrary1 та ClassLibrary2 успадковують інтерфейс IWorker у ClassLibraryStandard і реалізують метод Run.

ClassLibraryСтандартний код:

Код ClassLibrary1:

Код ClassLibrary2:

Код консолі ConsoleApp6 виглядає так:

Консоль відкриває метод Run із трьох потоків у плагіні DLL, який постійно динамічно виконується, і використовує log4net для запису результатів, після чого запускає його в консоліЗамініть DLL на найновішу бібліотеку через 3 секунди

Після запуску консолі протягом 1 або 5 секунд виводиться колекція поточного екземпляра AssemblyLoadContext — це завантажена бібліотека DLL.

Як показано нижче:



Ви бачите, що програма не має аномального виходу, і немає ситуації, коли плагін не можна знайти під час виконання. Причина, чому log4net записує результати виконання, полягає в тому, що консоль заблокована, і щоб забезпечити безперервне виконання трьох потоків, log4net використовується для запису результатів виконання, як показано на рисунку нижче:



2024-06-28 14:24:36,606 ІНФО 11 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 10 RollingFile - Почати видалення
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 11 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 11 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 10 RollingFile - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 13 RollingFile - 1
...
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 10 RollingFile - Видалення завершено
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
...
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 13 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 1
2024-06-28 14:24:36,606 ІНФО 11 RollingFile - 1
2024-06-28 14:24:36,607 ІНФО 13 RollingFile - 2
2024-06-28 14:24:36,607 ІНФО 12 RollingFile - 2

Прикріплені config.xml конфігурації:

(Кінець)




Попередній:Про рівень стійкості до відмов QR-коду QR-коду
Наступний:.NET/C# використовує PDFsharp для об'єднання кількох PDF-файлів в один
 Орендодавець| Опубліковано 2024-7-6 16:59:30 |
Використовуйте Roslyn для динамічної компіляції коду на C# і запуску
https://www.itsvse.com/thread-10786-1-1.html
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com