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

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

Существует три шага, связанных с созданием политики издателя:

  1. Создайте файл политики издателя.

  2. Создайте сборку политики издателя.

  3. Добавьте сборку политики издателя в глобальный кэш сборок.

Схема политики издателя описана в разделе "Перенаправление версий сборок". В следующем примере показан файл политики издателя, который перенаправляет одну версию myAssembly в другую.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <!-- Redirecting to version 2.0.0.0 of the assembly. -->
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

Сведения о том, как указать базу кода, см. в разделе "Указание расположения сборки".

Создание сборки политики издателя

Используйте компоновщик сборок (Al.exe) для создания сборки политики издателя.

Создание сборки политики издателя

Введите следующую команду в командной строке:

al /link:publisherPolicyFile /out:publisherPolicyAssemblyFile /keyfile:keyPairFile /platform:processorArchitecture

В этой команде:

  • Аргумент publisherPolicyFile — это имя файла политики издателя.

  • Аргументом publisherPolicyAssemblyFile является имя сборки политики издателя, которая приводит к этой команде. Имя файла сборки должно соответствовать формату:

    "policy.majorNumber.minorNumber.mainAssemblyName.dll"

  • Аргумент keyPairFile — это имя файла, содержащего пару ключей. Необходимо подписать сборку и сборку политики издателя с одной парой ключей.

  • Аргумент processorArchitecture определяет платформу, предназначенную для конкретной сборки процессора.

    Примечание.

    Возможность целевой архитектуры процессора доступна начиная с платформа .NET Framework 2.0.

Возможность целевой архитектуры процессора доступна начиная с платформа .NET Framework 2.0. Следующая команда создает сборку policy.1.0.myAssembly политики издателя, вызываемую pub.configиз файла политики издателя, назначает строгое имя сборке с помощью пары ключей в sgKey.snk файле и указывает, что сборка предназначена для архитектуры процессора x86.

al /link:pub.config /out:policy.1.0.myAssembly.dll /keyfile:sgKey.snk /platform:x86

Сборка политики издателя должна соответствовать архитектуре процессора сборки, к которую она применяется. Таким образом, если в сборке имеется ProcessorArchitecture значение MSIL, необходимо создать /platform:anycpuсборку политики издателя для этой сборки. Для каждой сборки процессора необходимо предоставить отдельную сборку политики издателя.

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

Другим следствием является то, что компоновщик версии 2.0 нельзя использовать для создания сборки политики издателя для сборки, скомпилированной с использованием более ранних версий платформа .NET Framework, так как она всегда указывает архитектуру процессора.

Добавление сборки политики издателя в глобальный кэш сборок

Используйте средство глобального кэша сборок (Gacutil.exe), чтобы добавить сборку политики издателя в глобальный кэш сборок.

Добавление сборки политики издателя в глобальный кэш сборок

Введите следующую команду в командной строке:

gacutil /i publisherPolicyAssemblyFile

Следующая команда добавляется policy.1.0.myAssembly.dll в глобальный кэш сборок.

gacutil /i policy.1.0.myAssembly.dll

Внимание

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

См. также