Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 2833|Ответ: 1

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

[Скопировать ссылку]
Опубликовано 28.06.2024 14:28:33 | | | |
Требования: Бизнес-логика сложна и требует настройки, и для такой логики, в отдельной DLL-ассембле, фон может динамически обновлять ассемблер и выполнять последнюю логику.

.NET Core не поддерживает динамическое создание и удаление AppDomains, как .NET Framework, поэтому никогда не было хорошего способа горячей загрузки плагинов, но хорошая новость в том, что .NET Core поддерживает Collectible Assembly с версий 3.0, и мы можем создать восстанавливаемый AssemblyLoadContext, который можно использовать для загрузки и разгрузки ассемблеров.

Класс AssemblyLoadContext:Вход по гиперссылке виден.

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

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

Код ClassLibrary1:

Код ClassLibrary2:

Код консоли ConsoleApp6 следующий:

Консоль открывает метод Run из 3 потоков в плагине 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 INFO 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 INFO 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 INFO 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 INFO 12 RollingFile - 2

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

(Конец)




Предыдущий:О уровне отказоустойчивости QR-кода QR-кода
Следующий:.NET/C# использует PDFsharp для объединения нескольких PDF-файлов в один
 Хозяин| Опубликовано 6.07.2024 16:59:30 |
Используйте Roslyn для динамической компиляции кода на C# и запускайте его
https://www.itsvse.com/thread-10786-1-1.html
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com