.Net发布者策略--原始发布者策略文件

本文关键字:发布者 策略 文件 原始 Net | 更新日期: 2023-09-27 18:26:10

我正在检查是否应该为我们的解决方案创建一个发布者策略文件。为此,我研究了该主题的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) 什么是"原始发布者策略文件"?我们正在处理的场景是,我们将解决方案的一个版本发送给客户(目前还没有发布者策略)。客户可能自己创建了程序集,这些程序集引用了我们的一些强名称程序集。现在,我们的解决方案的新版本(upate)即将发货,它不应该破坏客户程序集。我的理解是,出版商的政策允许这样做,但我们只能在更新后发货。这是个问题吗?

ii)那句话的最后一个单词指的是哪个集会?包含发布者策略的程序集,还是发布者策略为其定义绑定重定向的程序集?

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

Tia,

Thomas

.Net发布者策略--原始发布者策略文件

什么是"原始发布者策略文件"?

这是开发文件夹中的配置文件,例如1.0.MySharedAssembly.dll.config,在将其添加到GAC之前,它必须与策略程序集本身(例如policy.1.0.MySharedAassembly.dll)位于同一目录中。

那句话的最后一个单词指的是哪个集会?这个包含发布者策略的程序集,或其发布者策略定义绑定重定向?

这是发布者策略为其定义绑定重定向的程序集,例如: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