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:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、ClassLibrary2, 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)
|