Политика издателя .Net - оригинальный файл политики издателя? - PullRequest
2 голосов
/ 01 марта 2012

Я проверяю, нужно ли нам создавать файл политики издателя для нашего решения. С этой целью я изучил документацию MSDN по теме. Я смущен последним предложением на этой странице (обратите внимание, что я имею в виду версию .Net 3.5, это предложение может отсутствовать в документации других версий):

Important Note:

The publisher policy assembly cannot be added to the global assembly cache unless the original publisher policy file is located in the same directory as the assembly. 

i) что подразумевается под «исходным файлом политики издателя»? Сценарий, с которым мы имеем дело, заключается в том, что мы отправили клиенту версию нашего решения (без политики издателя на данный момент). Заказчик мог создавать сборки самостоятельно, ссылаясь на некоторые из наших строго названных сборок. Теперь должна быть поставлена ​​новая версия (обновление) нашего решения, которое не должно нарушать сборки клиента. Насколько я понимаю, политика издателей допускает именно это, но мы могли бы (могли) ее поставлять только с обновлением. Это проблема?

ii) к какой сборке относится последнее слово в этом предложении? Сборка, содержащая политику издателя, или сборка, для которой политика издателя определяет перенаправление привязки?

iii) в документации сказано, что политика издателя должна быть добавлена ​​в GAC, но ничего не говорится о строго названных сборках, на которые влияет политика издателя. Прямо сейчас для нашего решения они развернуты в каталоге приложения, и мы хотим сохранить его таким. Я понимаю концепцию, что это возможно. Может ли кто-нибудь это подтвердить?

Тиа,

Thomas

1 Ответ

2 голосов
/ 01 марта 2012

что означает «исходный файл политики издателя»?

Это файл конфигурации в вашей папке для разработки, например, 1.0.MySharedAssembly.dll.config, который должен быть расположенв том же каталоге, что и сама сборка политики, например, policy.1.0.MySharedAssembly.dll перед добавлением его в GAC.

к какой сборке относится последнее слово в этом предложении?Сборка, содержащая политику издателя, или сборка, для которой политика издателя определяет перенаправление привязки?

Это сборка, для которой политика издателя определяет перенаправление привязки, например: policy.1.0.MySharedAssembly.dll

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

Обычно я создаю файл 1.0.MySharedAssembly.dll.config (например, перенаправить из v1.0-> v2.0), содержащее перенаправление, например:

<assemblyIdentity name="MySharedAssembly"
                  publicKeyToken="2752785e627d5953"
                  culture="neutral" />
<!-- Redirecting to version 2.0.0.0 of the assembly. -->
<bindingRedirect oldVersion="1.0.0.0"
                 newVersion="2.0.0.0"/>

добавить его в мой проект и выплюнуть его в целевой каталог.Затем для создания policy.1.0.MyAssemblyToRedirect.dll (определяет перенаправление привязки) можно использовать инструмент компоновщика сборки .Я обычно использую событие пост-сборки для моего проекта MySharedAssembly, например:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\al.exe" /link:"$(TargetDir)1.0.MySharedAssembly.dll.config" /out:"policy.1.0.MySharedAssembly.dll" /keyfile:"$(ProjectDir)MySharedAssembly.snk"

Затем вы регистрируетесь в GAC во втором событии пост-сборки, например:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\gacutil.exe" /i "$(TargetDir)policy.1.0.MySharedAssembly.dll" /f
...