.Net发布者政策 - 原创发布者政策文件?

问题描述:

我正在检查是否应为我们的解决方案创建发布者策略文件。为此,我研究了该主题的MSDN documentation。我通过在该页面的最后一句迷惑(请注意,我指的.Net 3.5版本,这句话可能不存在其他版本的文档中):.Net发布者政策 - 原创发布者政策文件?

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. 

我)是什么“原始发布者策略文件”的含义?我们正在处理的情景是,我们向顾客发布了我们解决方案的一个版本(现在没有发布者政策)。客户可能自己创建了一些组件,这些组件是指一些我们的强命名组件。现在我们的解决方案的新版本(upate)即将发货,不应该打破客户组装。我的理解是,发布者政策允许这样做,但我们只能在更新后才能发布。那是问题吗? ii)哪个程序集在该句子中最后一个词是指哪个?包含发布者策略的程序集或发布者策略为其定义绑定重定向的程序集?

iii)文档说发布者策略必须添加到GAC,但它没有说明受发布者策略影响的强命名程序集的任何内容。现在,对于我们的解决方案,这些部署到应用程序目录中,我们希望保持这种方式。我对这个概念的理解是,这是可能的。有人可以证实这一点吗?

蒂亚,

托马斯

什么是 '原始发布政策文件' 是什么意思?

这是开发文件夹中的配置文件,例如, 1.0.MySharedAssembly.dll.config必须位于与策略程序集本身相同的目录中,例如policy.1.0.MySharedAssembly.dll,然后再将其添加到GAC。

哪个程序集在该句中引用最后一个单词?包含发布者策略的 程序集,或发布者策略定义的绑定重定向的程序集 ?

这对于出版商策略定义绑定重定向的装配,例如: policy.1.0.MySharedAssembly.dll

你的第三个问题:是的,这个概念是可行的。您不必将共享程序集添加到GAC,以便发布者策略生效。只要您的程序集是强类型的,发布者策略就会将它从用旧版本构建的客户端重定向到程序集的新版本。

我通常创建1.0.MySharedAssembly.dll.config文件(例如从v1.0-> 2.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"/> 

其添加到我的项目并吐出到目标目录。然后创建策略。1.0.MyAssemblyToRedirect.dll(定义绑定重定向),可以使用the assembly linker tool。我通常使用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