Un programme WinForm .NET que j'ai écrit il y a quelque temps. Parce qu'il fait référence à de nombreux fichiers de bibliothèque, mais ces fichiers de bibliothèque ont récemment été corrigés pour certains bugs et algorithmes. Mais le fichier programme principal n’a pas beaucoup changé. Ce n'est donc pas comme recompiler le programme principal. Ainsi, toutes les nouvelles versions des fichiers DLL ont été copiées dans le répertoire d'exécution, en espérant que le programme principal puisse appeler directement la nouvelle version du fichier bibliothèque. Il s'est avéré que ces fichiers de bibliothèque étaient signés avec Strong Name. Une erreur se produit dès que le programme principal est appelé, indiquant que le fichier de cette version est introuvable.
Plus tard, j'ai vérifié MSDN et j'ai découvert qu'il suffisait d'ajouter le nœud d'exécution à la configuration.
<exécution>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblydépendant>
<assemblyIdentity name="MonAssembly"
publicKeyToken="2b7c3a3291de04"
culture="neutre" />
<bindingRedirect oldVersion="3.0.0.8"
nouvelleVersion="4.1.0.0"/>
</dépendantAssembly>
</assemblyBinding>
</runtime>
Cependant, la condition préalable est que les PublicKeyToken des deux DLL soient identiques, ce qui signifie qu'elles doivent être signées avec le même fichier sn.
Bien entendu, si votre fichier de bibliothèque n’est pas du tout signé avec Strong Name, il n’est pas nécessaire de prendre en compte les problèmes de version.