Проблема перенаправления связывания в .net

У меня есть библиотека классов, называемая "MyAssembly", которая внутренне ссылается на a.dll, b.dll версии 3.1.1.0; Я создал проект, который вывел MyAssembly.dll. В другой системе (ящик) я создал проект веб-приложения и ссылался на MyAssembly.dll. новая система имеет новые версии a.dll и b.dll 4.0.0; Я использовал привязку переадресации в web.config, как показано ниже. Но все еще не удается скомпилировать веб-приложение. он говорит, что отсутствует ссылка на сборку a.dll, версия 3.1.1.0.

Может ли какой-нибудь орган помочь в решении этой проблемы?

Спасибо, Суреш

                                                  

Ответ 1

Это полностью сработало для меня. ПРИМЕЧАНИЕ. В теге configuration вам нужно НЕТ пространства имен. И вы ДОЛЖНЫ иметь пространство имен в тэге assemblyBinding.

<assemblyBinding> Element for <runtime>

<!-- important: no namespace -->
<configuration> 
  <runtime>
    <!-- important, must have this namespace -->
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly>
        <assemblyIdentity name="Strongly.Named.Assembly" publicKeyToken="xxx" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Сделайте оба из них, иначе он его не прочитает. Если он сообщает об ошибке, что в этом примере он не может загружать ничего, кроме 2.0.0.0, то он не правильно подбирает элементы конфигурации.

Это также работает только на сильно названных сборках. Чтобы узнать, есть ли что-то сильно, запустите следующую команду из окна командной строки VC

открыть (меню "Пуск" > все программы > визуальная студия > инструменты визуальной студии > команда командной строки visual studio)

Затем запустите:

sn -vf "path-to-assembly.dll"

Если он вернет, что он действителен, то он сильно назван.

Источник: http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/

Ответ 2

Это должно работать.

<runtime>  
 <dependentAssembly>  
   <assemblyIdentity name="MyAssembly" publicKeyToken="12233444"/>  
   <bindingRedirect oldVersion="3.1.1.0" newVersion="4.0.0.0"/>  
 </dependentAssembly>  
</runtime>  

Другое предложение: Удалить пространство имен из тэга конфигурации:

Вместо

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

попробовать

<configuration>

Ответ 3

Вы используете MyAssembly в своем веб-приложении. Перенаправление привязки будет использоваться для этой сборки, а не для сборок, которые использует MyAssembly. Проверьте манифест для MyAssembly.dll, он должен ссылаться на версии a.dll 3.1.1.0, поэтому отображается ошибка компилятора. Создайте MyAssembly с ссылкой на a.dll версии 4.0.0.0, а затем используйте MyAssembly в своем веб-приложении. Это будет работать.

Ответ 4

Попробуйте следующим образом:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="a.dll"
                      publicKeyToken="{put a.dll publicKeytoken here}"
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99"
                     newVersion="4.0.0.0"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="b.dll"
                      publicKeyToken="{put b.dll publicKeytoken here}"
                      culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-99.99.99.99"
                     newVersion="4.0.0.0"/>
  </dependentAssembly>
</assemblyBinding>

Кроме того, перейдите к ссылкам вашего приложения, щелкните правой кнопкой мыши файл a.dll и b.dll, перейдите к свойствам и установите флажок "Специфическая версия" на False.

Надеюсь, что это поможет.