反序列化似乎不适用于IDE中的强命名对象

时间:2009-06-08 22:06:24

标签: c# visual-studio visual-studio-2005

情况:

我有一堆业务对象坐在Web服务后面。所有对象都封装在一个BusObjects.DLL中,它被强名称并位于服务器上的GAC中(因为服务器上的其他应用程序也可以访问它)。

我有一个点击一次的客户端应用程序,它调用所述的Web服务。 click-once应用程序还附带此BusObjects.DLL。

Web服务将数据返回给客户端的方式如下:它将业务对象序列化为字节数组,并将此字节数组返回给客户端。客户端将接收到的字节数组反序列化为业务对象。这是可能的,因为客户端和服务器代码都引用了相同的BusObjects.DLL。一切都很好。

问题在于我。当我在VS2005 IDE中有客户端解决方案(包括BusObjects项目)时,代码无法将字节数组反序列化为业务对象,因为它声称,

  

“无法加载文件或程序集   “CC.BusObjects,   版本= 2.12.1.47,文化=中立,   PublicKeyToken = af56fdb58c626305'或   其中一个依赖项。位于   程序集的清单定义   与程序集引用不匹配。   (来自HRESULT的异常:0x80131040)“

我尝试过匹配版本,但如果将BusObjects项目作为项目引用而不是外部程序集,则似乎没有任何工作。不幸的是,我必须在解决方案中使用BusObjects进行调试。

我该怎么做才能解决这个问题?我听说过版本重定向,但似乎无法使用强大的命名程序集,但也许我做错了。

这是序列化和反序列化代码:

    public static byte[] ToBinary(Object objToBinary)
    {
        MemoryStream memStream = new MemoryStream();
        BinaryFormatter formatter = new BinaryFormatter(null, 
                  new StreamingContext(StreamingContextStates.Clone));
        formatter.Serialize(memStream, objToBinary);
        memStream.Seek(0, SeekOrigin.Begin);
        return memStream.ToArray();
    }


    public static object BinaryTo(byte[] objFromBinary)
    {
        MemoryStream ms = new MemoryStream(objFromBinary);
        BinaryFormatter formatter = new BinaryFormatter();
        ms.Position = 0;
        object obj = formatter.Deserialize(ms);
        return obj;
    }

序列化:

[WebMethod]
public byte [] GetContacts()
{
   return ToBinary(BusObjects.GetContacts());
}

要反序列化:

byte [] bts = ContactService.GetContacts();
List<Contact> lstContacts = (List<Contact>) BinaryTo(bts);

1 个答案:

答案 0 :(得分:2)

几乎可以肯定的是,您将版本号设置为在构建过程中自动递增。这通常导致一个版本号版本的场景可能导致您看到的负载问题。

尝试以下

  • 转到解决方案资源管理器。
  • 展开“属性节点”
  • 打开AssemblyInfo.cs
  • 将AssemblyVersion属性更改为具有硬编码版本号