Поиск источника исключений дизайнера в VS2010 - PullRequest
2 голосов
/ 21 сентября 2011

При загрузке основной формы приложения WinForms, над которым я работаю, я обнаружил знакомое исключение: ошибка «Чтобы предотвратить возможную потерю данных перед загрузкой конструктора, необходимо устранить следующие ошибки».Трассировка стека выглядит следующим образом:

Object reference not set to an instance of an object.    

Instances of this error (4)  

1.   Hide Call Stack 

at System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
at Microsoft.VisualStudio.Shell.Design.VsTargetFrameworkPropertyDescriptor.SetValue(Object component, Object value)
at System.Windows.Forms.Design.ControlDesigner.CanResetSizePropertyDescriptor.SetValue(Object component, Object value)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)  

Я знаю, что является причиной этой ошибки - где-то в MainForm есть четыре строки, которые ссылаются на объект изображения, который не существует во время разработки.У меня даже есть идея, как исправить ошибку, благодаря этому сообщению на MSDN .Проблема в том, что я не могу найти строки, из которых выдается исключение.Обычно я бы переходил к исключению, используя Окно списка ошибок , но оно говорит, что ошибок нет.Любые идеи относительно того, как я могу найти оскорбительные строки?

1 Ответ

2 голосов
/ 22 сентября 2011

Я обычно нахожу, что это относится к пользовательскому элементу управления, размещенному в форме, которая опирается на контейнер DI или аналогичный, но, как вы говорите, иногда трудно определить источник из стека вызовов, предоставляемого конструктором. Если вы размещаете много элементов управления, чтобы выяснить, какие элементы управления вызывают проблему, не вдаваясь в каждый из них, вы можете:

  1. Составьте список пользовательских элементов управления, которые непосредственно размещены в форме, затем
  2. Создайте новую временную форму, затем
  3. Перетащите каждый пользовательский элемент управления в вашем списке на форму, чтобы увидеть, какой из них убивает дизайнера
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...