2

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é .

+1

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 –

Répondre

4

I supposons que dans votre programme vous utilisez standart .NET serialization. Rappelez-vous que dans que type de sérialisation .NET enregistre informations de type aussi. Complétez les informations de type, avec espace de noms. Cela signifie que si vous modifiez le nom de l'assembly et recompilez le complet, le nom de type ne correspondra pas.

Si ce n'est pas ce que vous faites, veuillez clarifier.

+0

Vous avez absolument raison. Cela a résolu le problème - j'ai édité ma question avec des détails. – Superbest

+0

@Superbest: merci de me donner l'impression d'être utile :) – Tigran

Questions connexes