Сборка привязки Переадресация на более низкую версию

Я пытаюсь понизить зависимость 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 также.