J'ai un projet en cours où j'ai besoin de charger des DLL de manière programmatique et d'exécuter du code dans ces DLL. Les DLLs et leurs dépendances sont stockées dans une base de données, et je les écris sur le disque, mais je veux vérifier si une DLL est déjà là avant de l'écrire à nouveau. Actuellement, la base de données contient le nom d'assemblage fort et les données binaires du fichier ainsi qu'un numéro de version. Je pense que je dois également stocker la clé publique de l'assemblage pour la comparer à la clé des fichiers existants dans le répertoire DLL.
Je sais que je peux obtenir la clé publique des assemblages en utilisant AssemblyName.GetPublicKey(). Devrais-je simplement stocker la clé publique du fichier dans la base de données également ? Comment un assemblage peut-il être vérifié si la clé publique ne figure pas dans votre code (est-ce possible) ? Tous les exemples de code que j'ai trouvés montrent simplement l'obtention de la clé publique ou la vérification de l'existence d'un nom fort.
En ce moment, je travaille sur un cours de gestion de bibliothèque qui est juste un dictionnaire à la base. Elle vérifie le répertoire dll au démarrage et ajoute la clé publique de chaque fichier au dictionnaire. Ensuite, lorsque j'ai besoin de vérifier si un assemblage est déjà sur le disque, je peux simplement vérifier le dictionnaire (mais cela nécessite que je stocke la clé publique dans la base de données). Il utilise également FileSystemWatcher pour surveiller tout changement apporté aux bibliothèques. Si je dois écrire un assemblage mis à jour, il me suffit d'écraser celui qui se trouve sur le disque et la classe met à jour le dictionnaire.