Версия сборки GAC для использования на основе Web.Config - PullRequest
2 голосов
/ 12 мая 2011

Добрый день

У меня есть проект, который использует пользовательские сборки в 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.

1 Ответ

3 голосов
/ 12 мая 2011

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

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