Обязательная проблема перенаправления в.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.

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

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

4 ответа

Это полностью сработало для меня. ПРИМЕЧАНИЕ: вам не нужно пространство имен на 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 > инструменты Visual Studio > командная строка 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/

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

<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>

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

Попробуйте так:

<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.

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

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