.Net发布商政策 - 原始发布商政策文件?

时间:2012-03-01 10:31:30

标签: c# .net versioning

我正在检查是否应该为我们的解决方案创建发布者策略文件。为此,我研究了MSDN documentation这个主题。我对该页面的最后一句感到困惑(请注意,我指的是.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,但它没有说明受发布者政策影响的强名称程序集。现在,对于我们的解决方案,这些都被部署到应用程序目录中,我们希望保持这种方式。我对这个概念的理解是这是可能的。有人可以证实这一点吗?

蒂亚,

托马斯

1 个答案:

答案 0 :(得分:2)

  

“原始发布商政策文件”的含义是什么?

这是开发文件夹中的配置文件,例如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(定义绑定重定向),可以使用the assembly linker tool。我通常为MySharedAssembly项目使用post build事件,例如:

"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