【问题标题】:Change Assembly Name during Binary Serialization在二进制序列化期间更改程序集名称
【发布时间】:2011-02-07 22:03:34
【问题描述】:

在我提出问题之前,让我简要解释一下我的架构。我有一个客户端应用程序,它调用一个 Web 服务并向它传递一些数据项。 Web 服务使用此数据进行一些查找,然后使用 BinaryFormatter 将二进制序列化对象作为字节数组返回给客户端。然后客户端反序列化对象并使用它。我的问题是我必须重命名服务器用于新版本的程序集。这在客户端中反序列化时引起了问题。我不能选择部署新客户端以便可以使用新的程序集名称,所以我的问题是,有没有办法可以更改在序列化过程中写入的程序集名称。我知道如何使用 SerializationBinders 进行反序列化,但这并不能解决我的问题,因为这需要部署新客户端。

我目前将 C# 2.0 用于 win 表单应用程序和 Web 服务。

【问题讨论】:

标签: c# web-services serialization binary-data


【解决方案1】:

如果我使用 .NET 4,Thomas 的解决方案将是完美的。但是,.NET 2.0 不提供此功能。相反,我只是将 dll 重命名为原来的样子。我想最终重命名这些 dll,但目前我还没有找到一个可行的解决方案,我也不必将某些东西部署到客户端。

【讨论】:

    【解决方案2】:

    您可以使用仅包含 AssemblyInfo.cs 的旧名称重新创建一个空程序集,并在其中放置类型重定向: [程序集:TypeForwardedTo(typeof(MyClassName))],用于移动到另一个程序集的每个类型。 Ofc 这个程序集应该引用新的。

    但一般考虑不要对复杂的数据结构使用二进制序列化,因为它对在程序集之间移动类型等变化不友好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-27
      • 2015-07-13
      • 2013-06-14
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多