【发布时间】:2015-10-29 15:57:46
【问题描述】:
我的应用尝试反序列化客户端发送的数据,但失败并出现以下错误:
抛出异常: mscorlib.dll 中的“System.Runtime.Serialization.SerializationException”
附加信息:无法获取成员“<.ctor>b__0”。
谷歌搜索没有结果。好的,我决定进入反序列化逻辑并尝试找出究竟是什么导致了这种情况。好吧,一天过去了,我还差得远呢。
我使用来自Microsoft Reference Source 网站的说明来配置 Visual Studio。它确实下载了一些东西
MicrosoftPublicSymbols\mscorlib.pdb\
DCF1E4D31F6944AC87E7A634262BEE881\mscorlib.pdb (780kb)
E47257B512BA49BC9FC367C532FC5F1E2\mscorlib.pdb (953kb)
但调试器不介入。
我搜索了更多内容,并找到了另一种方法 - 安装了 dotTrace 应用程序和 used it as source server。这也无济于事。我仍然看到以下内容:
Symbol Load Information mscorlib.pdb 的弹出窗口说
C:\Users\me\AppData\Local\Temp\SymbolCache\MicrosoftPublicSymbols\mscorlib.pdb\e47257b512ba49bc9fc367c532fc5f1e2\mscorlib.pdb: 已加载符号。
我可以进入 System.Windows.Forms、System.Linq 等 - 所以一般来说,它可以工作 - 只是这个对 BinaryFormatter.Deserialize() 的特殊调用不起作用。这可能是什么原因,我怎样才能让它介入?
会不会是SecuritySafeCritical属性的原因?
[System.Security.SecuritySafeCritical]
public Object Deserialize(Stream serializationStream)
我正在使用 VS 2015 .Net 4.5.2(尽管我尝试了 4.5 得到了相同的结果)。
【问题讨论】:
-
你想调试微软代码还是解决反序列化问题?
-
我不知道如何在不调试 MS 代码的情况下解决我的反序列化问题,所以我可以确切地看到它失败的原因。你有更好的建议吗?
-
您是如何获得序列化数据的?你能创建一个重现行为的最简单的例子吗?
-
从头开始进行序列化/反序列化工作正常。只是客户端发送的那条数据由于未知原因而失败。恐怕要重现它的最小应用程序并不简单,也不容易创建。
-
BinaryFormatter不应该用于持久存储或跨机器通信,这正是您遇到问题的原因。这是非常不容忍变化的,如果双方没有运行对象图中涉及的所有程序集的完全相同版本,则会遇到这样的问题。
标签: .net visual-studio debugging debug-symbols