c# - 我应该为远程处理程序集强命名吗?

标签 c# .net interface client-server remoting

我读过 this 一篇优秀的博客文章,介绍了我正在经历的强命名和远程处理的困境。

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

The problem one encounters is this: as soon as there is a difference between the strong name of the common type library on the client, and the strong name of the common type library on the server, everything breaks. Remoting throws exceptions as soon as any notable client/server communication starts.

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

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

我已尝试按照博客中的建议对公共(public)程序集进行强命名,效果很好/我不明白 any remoting exceptions - 但是,这是推荐的吗?

我不会将公共(public)程序集(只包含接口(interface))添加到GAC中,也不太担心被篡改,只要我仔细更新接口(interface)以保持向后兼容性/not break existing clients就足够了,因此不需要需要强命名吗?

提前致谢。

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

最佳答案

如果可能的话,避免强命名!强命名是痛苦的。

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

关于c# - 我应该为远程处理程序集强命名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9687919/

相关文章:

c# - .Net CLR 如何在内部实现 "Interface"?

Java继承;将子类传递给父类(super class)的抽象方法

c# - 在 C# 中使用接口(interface)时的值与引用类型

c# - 激活单实例应用的主窗体

c# - 使用身份验证时,TFS WorkItemStore 在 ASP.NET MVC 应用程序中抛出 COMException

c# - 确保 NHibernate SessionFactory 只创建一次

c# - 将 RenderTexture 转换为 Texture2D

javascript - 调试属于 Dotnet 的 React Web 应用程序

c# - 在 .net 中编写 CSV 文件

c# - ObservableCollection.SetItem() 由于其保护级别而无法访问