Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 2833|Odpowiedź: 1

[.NET Core] .NET/C# implementuje gorące aktualizacje wtyczek DLL oparte na AssemblyLoadContext

[Skopiuj link]
Opublikowano 2024-6-28 14:28:33 | | | |
Wymagania: Logika biznesowa jest złożona i wymaga dostosowywania się, a dla takiej logiki, w osobnym asemblerze DLL, tło może dynamicznie aktualizować asembl i wykonywać najnowszą logikę.

.NET Core nie obsługuje dynamicznego tworzenia i usuwania AppDomainów tak jak .NET Framework, więc nigdy nie było dobrego sposobu na hotload wtyczek, ale dobrą wiadomością jest to, że .NET Core obsługuje Collectible Assembly od wersji 3.0 i możemy stworzyć odzyskiwalny AssemblyLoadContext, którego możemy używać do ładowania i wyładowywania asembleriów.

Klasa AssemblyLoadContext:Logowanie do linku jest widoczne.

Po pierwsze, stwórz nową konsolę i trzy biblioteki, mianowicie:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, wśród których biblioteki ClassLibrary1 i ClassLibrary2 dziedziczą interfejs IWorker w ClassLibraryStandard i implementują metodę Run.

Kod ClassLibraryStandard:

Kod ClassLibrary1:

Kod ClassLibrary2:

Kod konsoli ConsoleApp6 wygląda następująco:

Konsola otwiera metodę Run z 3 wątkami w wtyczce DLL, która jest ciągle dynamicznie wykonywana, używa log4net do zapisywania wyników wyjściowych, a następnie uruchamia ją w konsoliZamień DLL na najnowszą bibliotekę po 3 sekundach

Po uruchomieniu konsoli przez 1 lub 5 sekund wychodzi kolekcja aktualnej instancji AssemblyLoadContext, czyli załadowana biblioteka DLL.

Jak pokazano poniżej:



Widać, że program nie ma żadnych nieprawidłowych wyników i nie ma sytuacji, w której wtyczka nie może być dostępna podczas wykonywania. Powodem, dla którego log4net rejestruje wyniki wykonania, jest to, że konsola jest zablokowana, a aby zapewnić, że 3 wątki mogą działać nieprzerwanie, log4net służy do zapisywania wyników wykonywania, jak pokazano na poniższym rysunku:



2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Rozpocznij odinstalowywanie
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
2024-06-28 14:24:36,606 INFO 13 RollingFile - 1
...
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,607 INFO 13 RollingFile - 1
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Odinstalowanie zakończone
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
...
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,607 INFO 13 RollingFile - 1
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,607 INFO 13 RollingFile - 1
2024-06-28 14:24:36,607 INFO 12 RollingFile - 1
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,607 INFO 13 RollingFile - 2
2024-06-28 14:24:36,607 INFO 12 RollingFile - 2

Dołączone config.xml konfiguracja:

(Koniec)




Poprzedni:O poziomie odporności na błędy kodu QR QR
Następny:.NET/C# wykorzystuje PDFsharp do łączenia wielu plików PDF w jeden
 Ziemianin| Opublikowano 2024-7-6 o 16:59:30 |
Użyj Roslyn do dynamicznej kompilacji kodu C# i jego uruchomienia
https://www.itsvse.com/thread-10786-1-1.html
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com