Конфигурация издателя

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

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

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

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

  • Пакет установщика Windows (.msi файл), включающий новую версию сборки с конфигурацией издателя. Он может быть установлен как пакет обновления или QFE, так как в этом случае клиент решил глобально обновить систему. Эта версия пакета никогда не должна устанавливаться приложениями.
  • Модуль слияния установщика Windows (MSM-файл), который включает только новую версию сборки. Эта версия может быть включена в приложения.

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

Например, при установке следующего файла конфигурации издателя привязка с версии 2.0.0.0 microsoft.Windows.SampleAssembly перенаправляется на версию 2.0.1.0. Будет добавлена новая политика с именем 1.1.0.0.Policy в разделе %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity type="win32-policy" publicKeyToken="0000000000000000" name="policy.2.0.Microsoft.Windows.SampleAssembly" version="1.1.0.0" processorArchitecture="x86"/>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity type="win32" name="Microsoft.Windows.SampleAssembly"  processorArchitecture="x86" publicKeyToken="75e377300ab7b886"/>
         <bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.1.0"/>
      </dependentAssembly>
   </dependency>
</assembly>

Установка следующего файла конфигурации издателя для той же сборки перенаправляет привязку с версии 2.0.0.0 Microsoft.Windows.SampleAssembly на версию 2.0.3.0. При этом добавляется другая политика с именем 2.1.0.0.Policy в разделе %systemDrive%\windows\winsxs\policies\x86_policy.2.0.Microsoft.Windows.SampleAssembly_75e377300ab7b886_x-ww_<hashvalue>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity type="win32-policy" publicKeyToken="0000000000000000" name="policy.2.0.Microsoft.Windows.SampleAssembly" version="2.1.0.0" processorArchitecture="x86"/>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity type="win32" name="Microsoft.Windows.SampleAssembly"  processorArchitecture="x86" publicKeyToken="75e377300ab7b886"/>
         <bindingRedirect oldVersion="2.0.0.0" newVersion="2.0.3.0"/>
      </dependentAssembly>
   </dependency>
</assembly>