Программа WinForm .NET, которую я написал некоторое время назад. Потому что он ссылается на множество файлов библиотек, но эти файлы библиотек недавно были исправлены на предмет некоторых ошибок и алгоритмов. А вот основной файл программы особо не изменился. Так что это не похоже на перекомпиляцию основной программы. Поэтому все новые версии файлов DLL были скопированы в работающий каталог в надежде, что основная программа сможет напрямую вызвать новую версию файла библиотеки. Оказалось, что эти файлы библиотеки подписаны строгим именем. При вызове основной программы возникает ошибка, говорящая о том, что файл данной версии не найден.
Позже я проверил MSDN и обнаружил, что достаточно просто добавить в конфигурацию узел времени выполнения.
<время выполнения>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<зависимая сборка>
<assemblyIdentity name="MyAssembly"
publicKeyToken="2b7c3a3291de04"
культура="нейтрально" />
<bindingRedirect oldVersion="3.0.0.8"
новаяВерсия="4.1.0.0"/>
</зависимая сборка>
</assemblyBinding>
</runtime>
Однако обязательным условием для этого является то, что PublicKeyToken двух DLL одинаковы, а это означает, что они должны быть подписаны одним и тем же sn-файлом.
Конечно, если ваш файл библиотеки вообще не подписан строгим именем, нет необходимости рассматривать вопросы версии.