Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 2833|Antwort: 1

[.NET Core] .NET/C# implementiert DLL-Plugin-Hot-Updates basierend auf AssemblyLoadContext

[Link kopieren]
Veröffentlicht am 28.6.2024, 14:28:33 | | | |
Anforderungen: Die Geschäftslogik ist komplex und erfordert Anpassung, und für diese Logik kann der Hintergrund in einer separaten DLL-Assembler die Assembly dynamisch aktualisieren und die neueste Logik ausführen.

.NET Core unterstützt keine dynamische Erstellung und Entladung von AppDomains wie das .NET Framework, daher gab es nie eine gute Möglichkeit, Plugins zu hotloaden, aber die gute Nachricht ist, dass .NET Core Collectible Assembly seit 3.0 unterstützt und wir einen wiederherstellbaren AssemblyLoadContext erstellen können, mit dem wir Assemblies laden und entladen können.

AssemblyLoadContext-Klasse:Der Hyperlink-Login ist sichtbar.

Erstens eine neue Konsole und drei Bibliotheken erstellen, nämlich:ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, unter denen die ClassLibrary1- und ClassLibrary2-Bibliotheken die IWorker-Schnittstelle in ClassLibraryStandard übernehmen und die Run-Methode implementieren.

ClassLibraryStandard-Code:

ClassLibrary1-Code:

ClassLibrary2-Code:

Der Konsolencode von ConsoleApp6 lautet wie folgt:

Die Konsole öffnet die Run-Methode mit 3 Threads im DLL-Plugin, das ständig dynamisch ausgeführt wird, nutzt log4net, um die Ausgabeergebnisse aufzuzeichnen und sie dann in der Konsole auszuführenErsetze die DLL nach 3 Sekunden durch die neueste Bibliothek

Nachdem die Konsole 1 oder 5 Sekunden ausgeführt wurde, wird die Sammlung der aktuellen AssemblyLoadContext-Instanz ausgegeben, die die geladene DLL-Bibliothek darstellt.

Wie unten gezeigt:



Man sieht, dass das Programm keine abnormalen Ausgaben hat und es keine Situation gibt, in der das Plugin während des Ausführungsprozesses nicht gefunden werden kann. Der Grund, warum log4net die Ausführungsergebnisse aufzeichnet, liegt darin, dass die Konsole blockiert ist, und um sicherzustellen, dass die drei Threads kontinuierlich ausgeführt werden können, wird log4net verwendet, um die Ausführungsergebnisse aufzuzeichnen, wie in der untenstehenden Abbildung dargestellt:



2024-06-28 14:24:36,606 INFO 11 RollingFile - 1
2024-06-28 14:24:36,606 INFO 10 RollingFile – Deinstallation beginnen
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 - Deinstallation abgeschlossen
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

Angehängt config.xml Konfiguration:

(Ende)




Vorhergehend:Über QRCODE-QR-Code-Fehlertoleranzniveau
Nächster:.NET/C# verwendet PDFsharp, um mehrere PDF-Dateien zu einer zusammenzuführen
 Vermieter| Veröffentlicht am 06.07.2024, 16:59:30 |
Verwenden Sie Roslyn, um C#-Code dynamisch zu kompilieren und ausführen
https://www.itsvse.com/thread-10786-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com