【问题标题】:Should I strong name my assembly for remoting?我应该强命名我的程序集以进行远程处理吗?
【发布时间】:2012-03-13 16:20:54
【问题描述】:

我已经阅读了 this 关于强命名和远程处理问题的优秀博客文章,所有这些都是我所经历的。

基本上,当服务器从公共返回自定义类型时,客户端应用程序将始终需要加载服务器正在使用的强命名公共程序集的相同版本组装给客户。即:

遇到的问题是这样的:一有区别 客户端上通用类型库的强名称,和 服务器上通用类型库的强名称,一切 休息。远程处理一旦有任何值得注意的地方就会抛出异常 客户端/服务器通信开始。

这很烦人,因为我们在构建时会更新版本号,即使没有对公共程序集进行任何更改。实现可能没有改变,只是版本号。

我目前正在通过应用绑定重定向/发布者策略来解决这个问题 - 然而,这似乎需要大量工程才能符合关于程序集解析的强名称规则。

我已尝试按照博客中的建议对通用程序集进行强命名,效果很好/我没有得到any remoting exceptions - 但是,这是推荐的吗?

我不会在GAC中添加通用程序集(仅包含接口),也不会太担心被篡改,只要我小心地更新接口以保持向后兼容性/not break existing clients就够了,因此不需要强命名?

提前致谢。

PS:我知道 WCF,但我仍然需要维护一个远程处理接口。

【问题讨论】:

  • 根据我的经验,强命名(对开发人员而言)带来的麻烦多于其帮助:库中的每个小错误修复都需要您使用该库重新编译每个应用程序。因此,除非需要,否则我会避免使用它(GAC 就是一个例子)。

标签: c# .net interface client-server remoting


【解决方案1】:

尽可能避免强命名!强命名是痛苦的。

您可能已经知道,一旦您对程序集进行强命名,它所引用的所有内容也必须是强命名的。在一个简单的应用程序中,没什么大不了的。如果您必须处理 COM 互操作库、其他项目等,那么问题将成为维护的噩梦。

【讨论】:

  • 我看到微软“避免”了一点(msdn.microsoft.com/en-us/magazine/cc163583.aspx#S2)特别是:“修复错误而不更改程序集版本号,因此现有应用程序仍然可以找到程序集。这就是方法.NET Framework 用于错误修复,尽管它不适用于新功能或任何破坏兼容性的东西。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多