Поделиться через


Перенаправление версий сборки

Если приложение .NET Framework создано с использованием конкретной версии сборки со строгим именем, во время выполнения приложение будет использовать эту версию сборки. Однако иногда возникает необходимость, чтобы приложение выполнялось вместе с новой версией сборки. Файл конфигурации приложения, файл конфигурации компьютера или файл политики издателя может перенаправлять одну версию сборки для другой. Дополнительные сведения об использовании этих файлов средой CLR для определения нужной версии сборки см. в разделе Обнаружение сборок в среде выполнения. Для перенаправления версий сборки, как на уровне приложения, так и на уровне компьютера, можно воспользоваться инструментом настройки .NET Framework (Mscorcfg.msc) или непосредственно отредактировать файл конфигурации.

ПримечаниеПримечание

Перенаправление версий возможно только для сборок со строгим именем.Среда CLR не обрабатывает версию для сборок без строгого имени.

Перенаправление версий сборок с помощью политики издателя

Поставщики сборок могут сделать обязательным использование приложениями более новой версии какой-либо сборки путем включения файла политики издателя с обновленной сборкой. Параметры перенаправления сборок содержатся в файле политики издателя, который находится в глобальном кэше сборок.

У каждой версии сборки major.minor имеется свой файл политики издателя. Например, перенаправление версии 1.1.2.222 для версии 1.1.3.000 происходит в тот же файл, что и перенаправление версии 1.1.2.321 для версии 1.1.3.000. Однако перенаправление версии 2.0.0.999 на версию 3.0.0.000 происходит в другой файл.

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

Можно обойти политику издателя, задавая параметры в файле конфигурации приложения.

Игнорирование политики издателя

Новые версии сборок, которые объявлены совместимыми с предыдущими, все еще могут вызывать прерывание приложения. Когда это случается, нужно использовать следующий параметр в файле конфигурации приложения, чтобы среда выполнения игнорировала политику издателя.

<publisherPolicy apply="no" />

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

Перенаправление версий сборки на уровне приложения

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

Перенаправление версий сборки на уровне компьютера

В редких случаях администратор компьютеров требует, чтобы все приложения на компьютере использовали определенную версию сборки. Например, использование особой версии сборки в каждом приложении может быть обусловлено необходимостью обнаружить брешь в системе безопасности. Если перенаправление сборки произведено в файле конфигурации компьютера, то все приложения, использующие старую версию, будут использовать новую версию сборки. Файл конфигурации компьютера переопределяет файл конфигурации приложения и политику издателя.

Указание привязки сборок в файле конфигурации

Файл конфигурации приложения, файл конфигурации компьютера, а также файл политики издателя используют одну и ту же XML-схему в процессе перенаправления сборок.

Привязка сборок

Сведения для отдельной сборки следует указывать, помещая внутри элемента <dependentAssembly> сведения для каждой сборки. Элемент <assemblyIdentity> содержит идентификационные сведения о сборке. Файл конфигурации может содержать более одного элемента <dependentAssembly>, но в каждом элементе <dependentAssembly> должен присутствовать только один элемент <assemblyIdentity>.

Для привязки сборки необходимо задать строку "urn:schemas-microsoft-com:asm.v1" с атрибутом xmlns в теге <assemblyBinding>.

Задание политики издателя

Чтобы среда выполнения обходила политику издателя для конкретной сборки, элемент <publisherPolicy> следует поместить в элемент <dependentAssembly>. Чтобы среда выполнения обходила политику издателя для всех сборок, используемых приложением, нужно поместить этот параметр в элемент <assemblyBinding>. Также обойти политику издателя можно с помощью инструмента настройки .NET Framework (Mscorcfg.msc).

Значение по умолчанию для атрибута applyyes. Установка значения no атрибута apply переопределяет любые предыдущие значения yes. Например, если значение no атрибута apply установлено на уровне приложения, то игнорируются любые значения атрибута apply для определенных сборок, даже если в них объявлено значение yes. Поэтому единственным используемым значением является значение no, поскольку это значение изменяет значение по умолчанию.

Перенаправление версий сборки

Для перенаправления одной версии сборки на другую используется элемент <bindingRedirect>. Атрибут oldVersion может задавать или одну или несколько версий. Например, <bindingRedirect oldVersion="1.1.0.0-1.2.0.0" newVersion="2.0.0.0"/> указывает, что среда выполнения должна использовать версию 2.0.0.0 вместо версий сборки с номерами от 1.1.0.0 до 1.2.0.0.

Пример

В следующем примере показан способ перенаправления одной версии сборки myAssembly на другую с отключением политики издателя для mySecondAssembly.

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="myAssembly"
          publicKeyToken="32ab4ba45e0a69a1"
          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>
      <dependentAssembly>
      <assemblyIdentity name="mySecondAssembly"
        publicKeyToken="32ab4ba45e0a69a1"
        culture="en-us" />
        <!-- Publisher policy can be set only in the application 
          configuration file. -->
        <publisherPolicy apply="no" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Перенаправление привязки сборок .NET Framework

Чтобы перенаправить ссылки привязок сборок на определенную версию платформы .NET Framework, можно воспользоваться атрибутом appliesTo в элементе <assemblyBinding> файла конфигурации приложения. Этот необязательный атрибут содержит номер версии .NET Framework, к которой применяется перенаправление. Если атрибут appliesTo не указан, то элемент <assemblyBinding> применяется ко всем версиям платформы .NET Framework.

Атрибут appliesTo был впервые введен в .NET Framework версии 1.1 и не обрабатывается в версии 1.0. Это означает, что все элементы <assemblyBinding> применяются при использовании платформы .NET Framework версии 1.0, даже если задан атрибут appliesTo.

Например, для перенаправления привязки сборки для сборки Regcode .NET Framework версии 1.0 в файл конфигурации приложения следует включить следующий XML-код.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" 
    appliesTo="v1.0.3705">
    <dependentAssembly> 
      <!-- assembly information goes here -->
    </dependentAssembly>
  </assemblyBinding>
</runtime>

Для элементов <assemblyBinding> необходимо учитывать порядок. Сначала следует вводить сведения о перенаправлении привязок для сборок .NET Framework версии 1.0, а затем уже сведения о перенаправлении привязок для сборок .NET Framework версии 1.1. И только после этого вводятся сведения о перенаправлении привязок для любых перенаправлений сборок .NET Framework, которые не используют атрибут appliesTo и поэтому применимы к любым версиям платформы .NET Framework. В случае конфликта перенаправления используется первый подходящий оператор перенаправления в файле конфигурации.

Например, чтобы перенаправить одну ссылку на сборку платформы .NET Framework версии 1.0, а другую ссылку — на сборку .NET Framework версии 1.1, можно использовать шаблон, показанный в следующем псевдокоде.

<assemblyBinding xmlns="..." appliesTo="v1.0.3705"> 
  <!—.NET Framework version 1.0 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..." appliesTo="v1.1.5000"> 
  <!—.NET Framework version 1.1 redirects here --> 
</assemblyBinding> 

<assemblyBinding xmlns="..."> 
  <!-- redirects meant for all versions of the runtime --> 
</assemblyBinding>

См. также

Задачи

Практическое руководство. Создание политики издателя

Ссылки

Схема параметров среды выполнения

Основные понятия

Сборки в среде CLR

Обнаружение сборок в среде выполнения

Другие ресурсы

Программирование с использованием сборок

Файлы конфигурации

Настройка приложений

Схема файлов конфигурации для .NET Framework