Krav: Forretningslogikken er kompleks og kræver tilpasning, og for sådan logik kan baggrunden i en separat DLL-assembly dynamisk opdatere samlingen og udføre den nyeste logik.
.NET Core understøtter ikke dynamisk oprettelse og aflæsning af AppDomains som .NET Framework, så der har aldrig været en god måde at hotloade plugins på, men den gode nyhed er, at .NET Core har understøttet Collectible Assembly siden 3.0, og vi kan oprette en genvindelig AssemblyLoadContext, som vi kan bruge til at indlæse og aflaste assemblies.
AssemblyLoadContext-klassen:Hyperlink-login er synlig.
Først skal du oprette en ny konsol og tre biblioteker, nemlig:ConsoleApp6、ClassLibraryStandard、ClassLibrary1、KlasseBibliotek2, hvoraf ClassLibrary1- og ClassLibrary2-bibliotekerne arver IWorker-grænsefladen i ClassLibraryStandard og implementerer Run-metoden.
ClassLibraryStandard-kode:
ClassLibrary1-kode:
ClassLibrary2-kode:
ConsoleApp6-konsolkoden er som følger:
Konsollen åbner Run-metoden med 3 tråde i DLL-plugin'et, som konstant kører dynamisk, og bruger log4net til at registrere outputresultaterne, og kører det derefter i konsollenErstat DLL'en med det nyeste bibliotek efter 3 sekunder。
Efter at have kørt konsollen i 1 sekund eller 5 sekunder, outputtes samlingen af den aktuelle AssemblyLoadContext-instans, som er det indlæste DLL-bibliotek.
Som vist nedenfor:
Du kan se, at programmet ikke har noget unormalt output, og der er ingen situation, hvor plugin'et ikke kan findes under eksekveringen. Grunden til, at log4net registrerer eksekveringsresultaterne, er, at konsollen er blokeret, og for at sikre, at de 3 tråde kan eksekvere kontinuerligt, bruges log4net til at registrere eksekveringsresultaterne, som vist i figuren nedenfor:
2024-06-28 14:24:36,606 INFO 11 RollingFile - 1 2024-06-28 14:24:36,606 INFO 10 RollingFile - Start afinstallation 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 - Afinstaller fuldført 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 Vedhæftet config.xml konfiguration:
(Slut)
|