Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 2966|Отговор: 1

[.NET Core] .NET/C# реализира горещи ъпдейти на DLL плъгина въз основа на AssemblyLoadContext

[Копирай линк]
Публикувано в 28.06.2024 г. 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 на 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 ИНФОРМАЦИЯ 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 файлове в един
 Хазяин| Публикувано в 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