Практическое руководство. Создание политики издателя
Примечание.
Эта статья относится к .NET Framework. Он не применяется к более новым реализациям .NET, включая .NET 6 и более поздние версии.
Поставщики сборок могут указать, что приложения должны использовать более новую версию сборки, включив файл политики издателя с обновленной сборкой. Файл политики издателя указывает перенаправление сборок и базовые параметры кода и использует тот же формат, что и файл конфигурации приложения. Файл политики издателя компилируется в сборку и помещается в глобальный кэш сборок.
Существует три шага, связанных с созданием политики издателя:
Создайте файл политики издателя.
Создайте сборку политики издателя.
Добавьте сборку политики издателя в глобальный кэш сборок.
Схема политики издателя описана в разделе "Перенаправление версий сборок". В следующем примере показан файл политики издателя, который перенаправляет одну версию 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
, находится в том же каталоге, что и сборка.