【发布时间】:2015-07-10 03:33:13
【问题描述】:
我的一个应用程序(后来称为 ApplicationB)遇到了一个非常奇怪的异常
`Unable to find assembly 'MsgPack, Version=0.5.0.0, Culture=neutral, PublicKeyToken=a2625990d5dc0167'.`
这是我的场景,在我的 ApplicationA 上,我使用 MsgPack 序列化了一个对象,并使用 SE.Redis 将其存储到 Redis 中。稍后,我查询这个对象并反序列化它(当然仍然使用 MsgPack)。完成此操作后,我将通过使用 BinaryFormatter 序列化同一对象的 TCP/组件发送此对象。另一方面,即在 ApplicationB 上,一旦数据包到达,就会使用 BinaryFormatter 对其进行反序列化,这就是我得到异常的地方。
我对 TCP/Component 及其使用的序列化程序没有任何控制权。
那么为什么我会在 ApplicationB 上得到这个错误,它应该知道任何有关 MsgPack 的信息?
只是我想分享的一个想法,似乎 MsgPack 动态创建 DataContract 并且在反序列化时,它可能会在与 BinaryFormatter 冲突的对象上应用一些属性。当然我不确定。
但是有人遇到过这个问题吗?
干杯。
编辑:我注意到对于类型对象的成员,MsgPack 添加了很多成员来定义对象成员中的类型存储(如 IsDictionary、IsList 等)。它会影响 BinaryFormatter 吗?
【问题讨论】:
-
这是一个简单的“找不到文件”错误。最明显的原因是,ApplicationB 的探测路径中不存在 MsgPack.dll。或者它有错误的版本。使用 Fuslogvw.exe 解决程序集解析问题。
-
我不需要 ApplicationB 上的 MsgPack.dll,它甚至不应该知道 MsgPack。
-
嗯,当然可以。它在大声对你大喊大叫。
-
但是为什么 ApplicationB 需要这个 DLL?
标签: c# serialization deserialization binaryformatter msgpack