Сборка привязки Переадресация на более низкую версию
Я пытаюсь понизить зависимость NServiceBus, поэтому вместо использования 4.0.0.0 использовать 2.5.0.0
Я пытаюсь использовать следующие способы: ни один из них не работает.
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NServiceBus"
publicKeyToken="9fc386479f8a226c" culture="neutral"/>
<bindingRedirect oldVersion="4.0.0.0" newVersion="2.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Я также пробовал с помощью codebase:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NServiceBus"
publicKeyToken="9fc386479f8a226c"
culture="neutral"/>
<codeBase version="2.5.0.0" href="NServiceBus.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
Тем не менее, нада. Я просмотрел документацию msdn и не упоминал об использовании этой возможности в обратном порядке. Возможно ли это?
Ответы
Ответ 1
Я использую ваш первый оператор для некоторых DLL-интерфейсов, потому что у клиентов нашей компании есть другое состояние, касающееся обновлений для офиса. Это код, который я использую:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="office" publicKeyToken="71E9BCE111E9429C" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="11.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
Это обеспечивает обратную совместимость с версии 14 DLL до версии 11. Не могли бы вы предоставить ссылку на DLL u, используя?
Я загрузил фреймворк NServiceBus (версия 3.3.8) и исследовал DLL с помощью ILSpy. Я бы предложил вам сделать то же самое с вашей DLL. Для моей DLL это показывает мне тот же открытый токен Key, что и ваш. Вы уверены, что используете версию 4.0.0.0, а не версию 3.3.0.0. Или вы, возможно, пропустили публичные ключевые токены.
Ответ 2
Согласно MSDN: https://msdn.microsoft.com/en-us/library/eftw1fys(v=vs.110).aspx
Это значение может указывать более раннюю версию, чем oldVersion.
ссылаясь на атрибут newVersion
bindingRedirect
. Также в разделе "Примечания":
Вы также можете перенаправить из более новой версии в более старую версию сборки.
Их пример:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Я заметил, что он также упоминает что-то о Явное перенаправление привязки сборки в файле конфигурации приложения требует разрешения безопасности, возможно, это также влияет на вас
Ответ 3
Если бы я не ошибся, я сделал то же самое с файлами DDoS-сообщений stimulsoft, у которых была установлена последняя версия, но я хотел 2010.3 в своем приложении. но не через файл конфигурации и перенаправление:
Я просто удалил ссылку из проводника решений и добавил старый DLL-рефренс, затем я установил свойство Local для копирования и перекомпилировал, чтобы DLL отправилась с приложением в один и тот же каталог, все отлично работает. также сделал это с некоторыми другими dlls также.