VS2010 Не удается найти сборку после переименования

У меня есть решение, которое состоит, попросту говоря, из проекта Windows Forms Application и библиотеки классов, оба на C #. Мой проект библиотеки был назван OldName. Таким образом, пространство имен также было OldName, а сгенерированный файл - OldName.dll.

Я хотел изменить имя, поэтому вошел в «Свойства» и изменил имя сборки с OldName на NewName.

Здание теперь генерирует NewName.dll. Однако в тот момент, когда мое приложение пытается получить доступ к этой dll, я получаю System.Runtime.Serialization.SerializationException (dll содержит мои методы двоичной сериализации некоторых вещей): он утверждает, что Unable to find assembly 'OldName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.Procmon.exe подтверждает, что ищет старую dll (NAME NOT FOUND).

Странно то, что если я скопирую NewName.dll и переименую его в OldName.dll, так что у меня будут OldName.dll и NewName.dll, проблема не исчезнет. Если я удалю NewName.dll и оставлю только OldName.dll, программа выйдет из строя при запуске с: 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. На этот раз Procmon.exe сообщает, что не удалось выполнить CreateFileMapping операцию на OldName.dll из-за FILE LOCKED WITH ONLY READERS, но похоже, что то же самое происходит на NewName.dll.

Изменение имени сборки обратно на OldName все исправляет, но, конечно, имя файла становится OldName, а я этого не хочу.

Я не могу понять, где еще он ссылается на старое имя сборки. Что я мог упустить?

РЕШЕНИЕ: Моя программа позволяет пользователю создать файл, а затем сохранить его на диск, используя сериализацию с методами из моей библиотеки DLL. Это также позволяет загружать файл. Будучи ленивым, я однажды сделал тестовый файл и продолжал использовать его повторно. Оказывается, как предположил @Tigran, старое имя сборки все еще появлялось внутри сериализованного файла данных, поэтому, когда я пытался загрузить его из своей программы, я получал исключение, потому что он не мог найти сборку, на которую ссылается в сериализованном файл.


person Superbest    schedule 07.04.2012    source источник
comment
Как вы используете сериализацию? двоичный, xml, контракт данных? Ответ на этот вопрос поможет вам: stackoverflow.com/questions/950992/   -  person Jason Haley    schedule 07.04.2012


Ответы (1)


Я полагаю, что в вашей программе вы используете standart .NET serialization. Помните, что этот вид сериализации .NET также сохраняет информацию о типе. Полная информация о типе с пространством имен. Это означает, что если вы измените имя сборки и перекомпилируете полное имя типа, он получит несоответствие.

Если это не то, что вы делаете, поясните, пожалуйста.

person Tigran    schedule 07.04.2012
comment
Ты совершенно прав. Это решило проблему - я подробно отредактировал свой вопрос. - person Superbest; 07.04.2012
comment
@Superbest: спасибо, что подарили мне чувство полезности :) - person Tigran; 07.04.2012