J'ai une solution qui consiste, pour le dire simplement, en un projet Windows Forms Application et une bibliothèque de classes, tous les deux en C#. Mon projet de bibliothèque a été nommé OldName
. Ainsi, l'espace de noms était également OldName
et le fichier généré était OldName.dll
. Je voulais changer le nom, donc je suis allé dans les propriétés, et changé le nom de l'Assemblée de OldName
à NewName
.VS2010 Impossible de trouver l'assembly après son renommage
La construction génère maintenant un NewName.dll
. Cependant, le moment où mon application essaie d'accéder à cette DLL, je reçois un System.Runtime.Serialization.SerializationException
(la dll contient mes méthodes pour la sérialisation binaire de certaines choses): Il prétend que Unable to find assembly 'OldName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
Procmon.exe confirme qu'il cherche l'ancienne DLL (NAME NOT FOUND
).
Maintenant, la chose étrange est, si je copie le NewName.dll
et le renommer OldName.dll
, de sorte que je OldName.dll
et NewName.dll
, le problème persiste. Si je supprime NewName.dll
et ne laisser que OldName.dll
, le programme se bloque au lancement avec: System.IO.FileNotFoundException: Could not load file or assembly 'NewName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
Cette fois-ci, Procmon.exe signale qu'il n'a pas une opération CreateFileMapping
sur OldName.dll
parce FILE LOCKED WITH ONLY READERS
, mais il semble qu'il obtient la même chose sur NewName.dll
. La modification du nom d'assembly à OldName
corrige tout, mais bien sûr, le nom de fichier devient OldName
et je ne le souhaite pas.
Je ne peux pas pour la vie de moi comprendre où d'autre il fait référence à l'ancien nom de l'assemblée. Que pourrais-je manquer?
SOLUTION: Mon programme permet à l'utilisateur de créer un fichier, puis de l'enregistrer sur le disque en utilisant la sérialisation avec les méthodes de ma DLL. Il permet également de charger le fichier. Étant paresseux, j'avais fait un fichier test une fois et je continuais à le réutiliser. Comme le suggérait @Tigran, l'ancien nom de l'assembly apparaissait toujours dans le fichier de données sérialisé, donc quand j'ai essayé de le charger depuis mon programme, je recevais une exception car il ne trouvait pas l'assembly référencé dans le fichier sérialisé .
Comment utilisez-vous la sérialisation? binaire, xml, contrat de données? La réponse à cette question vous aide: http://stackoverflow.com/questions/950992/version-tolerant-serialization-how-to-find-assemblyname-of-the-original –