Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 2833|Antwoord: 1

[.NET Core] .NET/C# implementeert DLL-plugin hot updates gebaseerd op AssemblyLoadContext

[Link kopiëren]
Geplaatst op 28-6-2024 14:28:33 | | | |
Vereisten: De bedrijfslogica is complex en vereist aanpassing, en voor dergelijke logica kan in een aparte DLL-assembly de achtergrond de assembly dynamisch bijwerken en de nieuwste logica uitvoeren.

.NET Core ondersteunt geen dynamische creatie en ontlading van AppDomains zoals het .NET Framework, dus er is nooit een goede manier geweest om plugins te hotloaden, maar het goede nieuws is dat .NET Core Collectible Assembly al ondersteunt sinds 3.0, en we kunnen een herwinbare AssemblyLoadContext maken die we kunnen gebruiken om assemblies te laden en te lossen.

AssemblyLoadContext-klasse:De hyperlink-login is zichtbaar.

Maak eerst een nieuwe console en drie bibliotheken, namelijk:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, waaronder de ClassLibrary1- en ClassLibrary2-bibliotheken de IWorker-interface in ClassLibraryStandard overnemen en de Run-methode implementeren.

ClassLibraryStandard-code:

ClassLibrary1-code:

ClassLibrary2-code:

De consolecode van ConsoleApp6 is als volgt:

De console opent de Run-methode van 3 threads in de DLL-plugin die continu dynamisch wordt uitgevoerd, gebruikt log4net om de uitvoerresultaten op te nemen, waarna deze in de console wordt uitgevoerdVervang de DLL na 3 seconden door de nieuwste bibliotheek

Na het draaien van de console van 1 seconde of 5 seconden wordt de verzameling van de huidige AssemblyLoadContext-instantie uitgevoerd, wat de geladen DLL-bibliotheek is.

Zoals hieronder getoond:



Je ziet dat het programma geen abnormale output heeft, en er is geen situatie waarin de plugin niet gevonden kan worden tijdens het uitvoeringsproces. De reden dat log4net de uitvoeringsresultaten registreert, is omdat de console geblokkeerd is, en om ervoor te zorgen dat de 3 threads continu kunnen worden uitgevoerd, wordt log4net gebruikt om de uitvoeringsresultaten vast te leggen, zoals te zien is in de onderstaande figuur:



2024-06-28 14:24:36.606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile - Start met deinstalleren
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 - Verwijderen voltooid
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

Bijgevoegde config.xml configuratie:

(Einde)




Vorig:Over QRCODE QR-code fouttolerantieniveau
Volgend:.NET/C# gebruikt PDFsharp om meerdere PDF-bestanden samen te voegen tot één
 Huisbaas| Geplaatst op 6-7-2024 16:59:30 |
Gebruik Roslyn om C#-code dynamisch te compileren en uit te voeren
https://www.itsvse.com/thread-10786-1-1.html
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com