Версия сборки GAC для использования на основе Web.Config

Добрый день

У меня есть проект, в котором используются пользовательские сборки в GAC: чтобы иметь возможность использовать это, я добавил ссылку на свой проект в

C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\JOHN.CommonLib\v4.0_1.0.0.0__9cd884563ebafb62\JOHN.CommonLib.dll

(CopyLocal=False; SpecificVersion=False) Кроме того, я добавил это в файл Web.Config.

<compilation debug="false" strict="true" explicit="true" targetFramework="4.0" >
  <assemblies>
    <add assembly="JOHN.CommonLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9cd884563ebafb62"/>        
  </assemblies >
</compilation >

Он работает, как и ожидалось. Проблема в том, что когда я устанавливаю новую версию, я устанавливаю новую версию в GAC и соответствующим образом меняю Web.Config.

<add assembly="JOHN.CommonLib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=9cd884563ebafb62"/>

JOHN.CommonLib — это тестовая библиотека классов, которая возвращает «1.0» или «2.0» в зависимости от версии.

Проблема: если я компилирую с использованием 1.0, веб-приложения, которые его используют, всегда показывают «1.0», даже если я изменяю Web.Config между 1.0 и 2.0. Я хотел бы, чтобы мое веб-приложение использовало версию, которую я пишу в моем Web.Config

Есть идеи? Я также останавливаю и запускаю AppPool между изменением Web.Config.


person John    schedule 12.05.2011    source источник


Ответы (1)


Для сборок со строгими именами приложение всегда будет привязываться (если возможно) к версии, с которой оно было создано. Чтобы переопределить эту привязку, необходимо указать перенаправление привязки для сборки. Это можно сделать несколькими способами — см. эту ссылку. Таким образом, один из способов использования файла конфигурации приложения/веб-сайта - например,

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="JOHN.CommonLib"
          publicKeyToken="9cd884563ebafb62"
          culture="en-us" />
        <!-- Assembly versions can be redirected in application, 
          publisher policy, or machine configuration files. -->
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
person VinayC    schedule 12.05.2011
comment
Спасибо это то что мне было нужно! Далее погуглив я наткнулся на этот blogs.msdn.com/b/thottams/archive/2007/01/30/ - person John; 13.05.2011