У меня есть решение, которое состоит, попросту говоря, из проекта 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, старое имя сборки все еще появлялось внутри сериализованного файла данных, поэтому, когда я пытался загрузить его из своей программы, я получал исключение, потому что он не мог найти сборку, на которую ссылается в сериализованном файл.