在VS2010中找不到设计器异常的来源

时间:2011-09-21 17:59:18

标签: winforms visual-studio-2010

当加载我正在处理的WinForms应用程序的mainform时,我遇到了一个熟悉的异常:“为了防止在加载设计器之前可能丢失数据,必须解决以下错误”错误。堆栈跟踪如下:

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的某处埋有四行,这些行引用了一个在设计时不存在的图像对象。由于this post at MSDN,我甚至知道如何修复错误。麻烦的是,我找不到抛出异常的行。通常情况下,我会使用Error List window导航到异常,但它表示没有错误。关于如何找到违规行的任何想法?

1 个答案:

答案 0 :(得分:2)

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

  1. 列出直接托管在表单上的用户控件,然后
  2. 创建一个新的临时表单,然后
  3. 将列表中的每个用户控件放到表单上以查看哪一个杀死设计器
相关问题