Объясните критическую ошибку в Visual Studio 2010 и более поздних версиях, WinForms и WPF

Попробуйте поместить следующий код внутриLoad обработчик событий для WinForms илиLoaded для WPF.

Dim doc As New XmlDocument
Dim nsmgr As New XmlNamespaceManager(Nothing) 'this line throws an exception

Проблема в том, что исключение не выдается, и происходит повреждение стека. У этого могут быть различные побочные эффекты, в зависимости от IDE - см. Ниже.

Затронутые IDE: 2008, 2010 и 2012 (те, которые я мог проверить). 2010 сбрасывает состояние стека и возвращает из sub / handler, как будто ничего не произошло (но без продолжения других операторов). 2012 может предупредить пользователя о сбое приложения и попытке запуска вcompatibility mode, В следующий раз после этого он работает так же, как и в 2010 году. Правильно выдает исключение, но только в конфигурации по умолчанию (AnyCPU). Переключение целевой платформы на x86 заставляет проблему появиться и в 2008 году.Затронутые фреймворки - это WinForms и WPF. Консольные приложения и ASP.NET работают нормально. .NET v2.0-4.5.Затрагиваемая область толькоLoad событие пока что Помещение этого кода в кнопку заставляет его работать.Затрагиваемая конфигурация сборки = любая. Пробовал по умолчаниюDebug а такжеRelease.

Почему я считаю это ошибкой, потому что она может оставлять объекты в нестабильном состоянии - они не завершили инициализацию, что не является ожидаемым поведением. Что важно, так это то, что никто не узнает, что это произошло, поскольку это не исключение. В зависимости от вашего дизайна, вы можете получить неверные данные в вашей базе данных, что в худшем случае может привести к серьезным последствиям.

У кого-нибудь есть хорошее объяснение, почему это может происходить и есть ли обходной путь?

Ответы на вопрос(1)

Ваш ответ на вопрос