Почему замена.DLL не будет найдена?

Я внес изменение во вспомогательную DLL, которую использует мой проект, конечно же, построил ее, переименовал устаревшую DLL в *.dll_old, скопировал и вставил новую версию DLL в эту же папку.

Тем не менее, когда я запустил приложение, использующее библиотеку DLL, оно выдало ошибку:

"An expected error has occurred...bla bla bla...or select Details for more information.

Я выбрал Подробности и увидел:

TypeLoadException
File or assembly name <name of the DLL, which I just replaced>
Version=<bla>
Culture=neutral
PublicKeyToken=null, or one of its dependencies, was not found.

ОБНОВИТЬ

Основываясь на комментариях, я предполагаю, что замена DLL - это больше, чем можно было бы ожидать. Я не знаю, является ли это важным или нет, я подумал, что замена DLL будет похожа на замену EXE, но, возможно, нет: AssemblyInfo.cs проекта DLL говорит:

[assembly: AssemblyVersion("1.3.*")]                // used by .NET framework only
[assembly: AssemblyFileVersion("1.3.0.308")]        // File Version - increment here
[assembly: AssemblyInformationalVersion("6.3.0")]   // Product version - set to current IEQ system

... и версия в сообщении об ошибке "1.3.3889.27539"

Нужно ли обновлять одну из этих строк (я бы предположил среднюю, если это так) до этого значения (1.3.3889.27539)? Или же...???

ОБНОВИТЬ

Так как.DLL не имеет строгого имени, я попытался просто удалить ссылку (на старый.DLL) в проекте, который использует DLL, а затем снова добавить его (то же имя файла, другая версия). Я вижу, однако, что обновление.DLL не изменяет номера версий, показанные выше - IOW, AssemblyInfo.cs не обновляется при сборке. Должно ли это? Нужно ли вручную обновлять эти значения?

1 ответ

Решение

Похоже, что типы внутри вашей исходной DLL были указаны в вашем EXE-файле. Когда вы заменили его собственной версией, ссылки были перепутаны. EXE-файл содержит таблицу метаданных со списком типов, методов, свойств и т. Д., На которые он ссылается, и точную версию ожидаемой сборки. Предоставление чего-то еще, даже если все было одинаково, но номер версии просто не одно и то же. Вот почему вы получаете исключение.

ОБНОВЛЕНИЕ: Да, это возможно. Однако это включает в себя создание файла манифеста. Для получения дополнительной информации посетите этот веб-сайт MSDN по перенаправлению версий сборки. Кроме того, имейте в виду, что только строго подписанные сборки могут быть перенаправлены. Неподписанные сборки будут игнорироваться.

Другие вопросы по тегам