在我提出问题之前,让我简要解释一下我的架构。我有一个客户端应用程序,它调用Web服务并传递几个数据项。 Web服务使用此数据执行一些查找,然后使用BinaryFormatter将二进制序列化对象作为字节数组返回给客户端。然后客户端反序列化对象并使用它。我的问题是我必须重命名服务器用于新版本的程序集。这在客户端反序列化时引起了问题。我不能选择部署新客户端,因此可以使用新的程序集名称,所以我的问题是,有没有办法可以更改序列化过程中编写的程序集名称。我知道如何使用SerializationBinder进行反序列化,但这并不能解决我的问题,因为这需要部署新的客户端。
我目前正在为win表单应用程序和Web服务使用C#2.0。
答案 0 :(得分:0)
如果我使用.NET 4,Thomas的解决方案将是完美的。但是,.NET 2.0不提供此功能。相反,我只是将dll重新命名为它们。我想最终重命名dll但是在这一点上我还没有找到一个可行的解决方案,我也不需要向客户端部署一些东西。
答案 1 :(得分:0)
您可以使用仅包含AssemblyInfo.cs的旧名称重新创建一个空程序集,您可以在其中放置类型重定向: [assembly:TypeForwardedTo(typeof(MyClassName))],用于移动到另一个程序集的每个类型。这个程序集应该引用新的程序集。
但一般认为不要对复杂的数据结构使用二进制序列化,因为它对组件之间移动类型等变化不友好。