gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:36 25 4
gpt4 key购买 nike

情况:

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

我有一个点击一次的客户端应用程序,它调用上述网络服务。单击一次应用程序还附带此 BusObjects.DLL。

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

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

"Could not load file or assembly 'CC.BusObjects, Version=2.12.1.47, Culture=neutral, PublicKeyToken=af56fdb58c626305' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from 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);

最佳答案

几乎可以肯定的是,您将版本号设置为在构建过程中自动递增。这通常会导致版本号不一致的情况,从而导致您所看到的加载问题。

尝试以下操作

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

关于c# - 反序列化似乎不适用于 IDE 中的强命名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/967258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com