Winforms 在VS2010中查找设计器异常的源时遇到问题

Winforms 在VS2010中查找设计器异常的源时遇到问题,winforms,visual-studio-2010,Winforms,Visual Studio 2010,在加载我正在使用的WinForms应用程序的主窗体时,我遇到了一个常见的异常:“为了防止加载设计器之前可能的数据丢失,必须解决以下错误”错误。stacktrace如下所示: Object reference not set to an instance of an object. Instances of this error (4) 1. Hide Call Stack at System.ComponentModel.ReflectPropertyDescriptor

在加载我正在使用的WinForms应用程序的主窗体时,我遇到了一个常见的异常:“为了防止加载设计器之前可能的数据丢失,必须解决以下错误”错误。stacktrace如下所示:

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中的某个地方有四行代码引用了一个在设计时不存在的图像对象。我甚至有一个如何修复错误的想法,多亏了。问题是,我找不到引发异常的行。通常,我会使用导航到异常,但它表示没有错误。关于如何定位有问题的行有什么想法吗?

我通常发现这与托管在依赖DI容器或类似容器的表单上的用户控件有关,但正如您所说,有时很难从设计器提供的调用堆栈中确定源。如果您托管了很多控件,要找出哪些控件导致了问题,而不必深入研究每一个控件,您可以:

  • 列出表单上直接承载的用户控件,然后
  • 创建一个新的临时表单,然后
  • 将列表中的每个用户控件放到表单上,以查看哪个控件会杀死设计器