Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 2833|Odgovoriti: 1

[.NET Core] .NET/C# izvaja vroče posodobitve DLL vtičnikov na podlagi AssemblyLoadContext

[Kopiraj povezavo]
Objavljeno 28. 6. 2024 ob 14:28:33 | | | |
Zahteve: Poslovna logika je kompleksna in zahteva prilagoditev, za takšno logiko pa lahko v ločenem DLL sestavu ozadje dinamično posodablja sestavo in izvaja najnovejšo logiko.

.NET Core ne podpira dinamičnega ustvarjanja in odstranjevanja AppDomainov kot .NET Framework, zato nikoli ni bilo dobrega načina za hotload vtičnikov, a dobra novica je, da .NET Core podpira Collectible Assembly že od različice 3.0 in lahko ustvarimo obnovljiv AssemblyLoadContext, ki ga lahko uporabimo za nalaganje in razlaganje assemblev.

Razred AssemblyLoadContext:Prijava do hiperpovezave je vidna.

Najprej ustvarite novo konzolo in tri knjižnice, in sicer:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, med katerimi knjižnici ClassLibrary1 in ClassLibrary2 podedujeta vmesnik IWorker v ClassLibraryStandard in implementirata metodo Run.

ClassLibraryStandardna koda:

Koda ClassLibrary1:

Koda ClassLibrary2:

Koda konzole ConsoleApp6 je naslednja:

Konzola odpre metodo Run s tremi nitmi v DLL vtičniku, ki se nenehno dinamično izvaja, uporabi log4net za beleženje izhodnih rezultatov in ga nato zažene v konzoliZamenjaj DLL z najnovejšo knjižnico po 3 sekundah

Po 1 sekundi ali 5 sekundah delovanja konzole se izpiše zbirka trenutne instance AssemblyLoadContext, ki je naložena DLL knjižnica.

Kot je prikazano spodaj:



Vidite lahko, da program nima nenavadnega izhoda in ni situacije, kjer vtičnika med izvajanjem ne bi bilo mogoče najti. Razlog, zakaj log4net beleži rezultate izvajanja, je v tem, da je konzola blokirana, in da bi zagotovili neprekinjeno izvajanje vseh treh niti, se log4net uporablja za beleženje rezultatov izvajanja, kot je prikazano na spodnji sliki:



2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Začni odstranjevati
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 - Odstranitev končana
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

Priložena config.xml konfiguracija:

(Konec)




Prejšnji:O stopnji odpornosti na napake QR kode QRCODE
Naslednji:.NET/C# uporablja PDFsharp za združevanje več PDF datotek v eno
 Najemodajalec| Objavljeno 6. 7. 2024 ob 16:59:30 |
Uporabite Roslyn za dinamično prevajanje C# kode in njeno zagon
https://www.itsvse.com/thread-10786-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com