尝试将以下代码放在WinForms的Load
事件处理程序或WPF的Loaded
中。
Dim doc As New XmlDocument
Dim nsmgr As New XmlNamespaceManager(Nothing) 'this line throws an exception
问题是不会抛出异常,并且会发生堆栈损坏。它可能有不同的副作用,具体取决于IDE - 见下文。
compatibility mode
中运行。之后的下一次运行与2010年相同.2008正确抛出异常,但仅限于默认配置(AnyCPU)。将平台目标切换到x86也会使问题再次出现在2008年。Load
事件。
将此代码放入按钮可以使其正常工作。Debug
和Release
。为什么我认为它是一个错误是因为它可以使对象处于不稳定状态 - 它们没有完成初始化,这不是预期的行为。重要的是,没有人会知道它发生了,因为它不会引发异常。根据您的设计,您最终可能会在数据库中显示不正确的数据,这在最坏的情况下可能会导致严重的后果。
有没有人能够解释为什么会发生这种情况以及是否有解决方法?
答案 0 :(得分:2)
问题是由在x64操作系统上定位x86平台时发挥作用的wow64仿真层引起的。
它吞下了负责触发Load事件的代码中的异常
因此,调试器不会看到异常,也无法介入处理该情况
This article seems to document那里发生了什么,
This previous answer解释了可能的解决方法。 我最喜欢的是将所有内容移出Form_Load事件,并将有问题的代码放在表单构造函数中。 (当然我不知道它是否适用于您的情况)