Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 2833|Répondre: 1

[.NET Core] .NET/C# implémente des mises à jour chaudes des plugins DLL basées sur AssemblyLoadContext

[Copié le lien]
Publié le 28-06-2024 à 14:28:33 | | | |
Exigences : La logique métier est complexe et nécessite une personnalisation, et pour cette logique, dans un assembleur DLL séparé, l’arrière-plan peut mettre à jour dynamiquement l’assembleur et exécuter la logique la plus récente.

.NET Core ne supporte pas la création et le déchargement dynamique des AppDomains comme le .NET Framework, donc il n’y a jamais eu de bonne façon de hotloader des plugins, mais la bonne nouvelle, c’est que .NET Core supporte l’assembleur collectible depuis la version 3.0, et nous pouvons créer un AssemblyLoadContext récupérable que nous pouvons utiliser pour charger et décharger les assemblages.

Classe AssemblyLoadContext :La connexion hyperlientérée est visible.

Tout d’abord, créez une nouvelle console et trois bibliothèques, à savoir :ConsoleApp6ClassLibraryStandardClassLibrary1ClassLibrary2, parmi lesquelles les bibliothèques ClassLibrary1 et ClassLibrary2 héritent de l’interface IWorker dans ClassLibraryStandard et implémentent la méthode Run.

Code standard de ClassLibrary :

Code ClassLibrary1 :

Code ClassLibrary2 :

Le code console de ConsoleApp6 est le suivant :

La console ouvre la méthode Run de 3 threads dans le plugin DLL qui s’exécute dynamiquement en permanence, utilise log4net pour enregistrer les résultats de sortie, puis l’exécute dans la consoleRemplacez la DLL par la dernière bibliothèque après 3 secondes

Après avoir lancé la console pendant 1 seconde ou 5 secondes, la collection de l’instance AssemblyLoadContext actuelle est en sortie, qui correspond à la bibliothèque DLL chargée.

Comme montré ci-dessous :



Vous pouvez voir que le programme n’a aucune sortie anormale, et il n’y a aucune situation où le plugin ne peut pas être trouvé pendant le processus d’exécution. La raison pour laquelle log4net enregistre les résultats d’exécution est que la console est bloquée, et afin de garantir que les 3 threads puissent s’exécuter en continu, log4net est utilisé pour enregistrer les résultats d’exécution, comme montré dans la figure ci-dessous :



2024-06-28 14:24:36,606 INFO 11 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 10 Fichier roulant - Commencez la désinstallation
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 11 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 11 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 10 Fichier roulant - AssemblyLoadContext_Unloading
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 13 Fichier roulant - 1
...
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,607 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 10 Fichier roulant - Désinstallation terminée
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
...
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,607 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,607 INFO 13 Fichier roulant - 1
2024-06-28 14:24:36,607 INFOS 12 Fichier roulant - 1
2024-06-28 14:24:36,606 INFO 11 Fichier roulant - 1
2024-06-28 14:24:36,607 INFOS 13 Fichier roulant - 2
2024-06-28 14:24:36,607 INFO 12 Fichier roulant - 2

Configuration config.xml jointe :

(Fin)




Précédent:À propos du niveau de tolérance aux défauts des codes QR QR
Prochain:.NET/C# utilise PDFsharp pour fusionner plusieurs fichiers PDF en un seul
 Propriétaire| Publié le 6-07-2024 à 16:59:30 |
Utilisez Roslyn pour compiler dynamiquement du code C# et l’exécuter
https://www.itsvse.com/thread-10786-1-1.html
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com