尝试将以下代码放入WinForms 或WPF的Load
事件处理程序中。Loaded
Dim doc As New XmlDocument
Dim nsmgr As New XmlNamespaceManager(Nothing) 'this line throws an exception
问题是没有抛出异常,并且发生堆栈损坏。它可能有不同的副作用,具体取决于 IDE - 见下文。
- 受影响的 IDE 是:2008、2010 和 2012(我可以测试的)。2010 重置堆栈状态,并从子/处理程序返回,就像什么都没发生一样(但没有继续执行其他语句)。2012 可能会警告用户有关失败的应用程序和尝试在
compatibility mode
. 之后的下一次运行与 2010 相同。2008 正确地引发异常,但仅在默认配置 (AnyCPU) 上。将平台目标切换到 x86 使问题在 2008 年再次出现。 - 受影响的框架是 WinForms 和 WPF。控制台应用程序和 ASP.NET 似乎工作正常。.NET v2.0-4.5。
- 受影响的范围是
Load
迄今为止唯一的事件。将此代码放入按钮使其工作。 - 受影响的构建配置 = 任何。尝试默认
Debug
和Release
.
为什么我认为它是一个错误是因为它会使对象处于不稳定状态——它们没有完成初始化,这不是预期的行为。关键是没有人会知道它发生了,因为它不会抛出异常。根据您的设计,您最终可能会在数据库中得到不正确的数据,在最坏的情况下可能会导致严重的后果。
有没有人很好地解释为什么会发生这种情况以及是否有解决方法?