VS 2010 – 使用Designer打开用户控件/表单时出错

C#,VS2010,WinForm应用程序:

有时我确实遇到了打开一些控件/表单时收到错误消息的问题。 所有代码都编译并且应用程序正常运行。 打开设计师的控件给了我:

设计器加载器没有提供根组件,但没有说明原因。

根据我的经验,我可以说,我的代码中通常会出现一些未正确初始化的内容,例如某个属性未设置,在运行时以某种方式可用,但在设计人员打开时则不然。 唯一的问题是,根本原因很难找到。

问:当设计人员在Visual Studio 2010中打开我的组件时,是否有机会以某种方式使用调试器? 这将有很大帮助,解决问题很可能只需几分钟。

备注:为了清楚说明,我知道如何使用调试器;-),我只是不知道如何告诉VS2010的设计人员在调试模式下打开我的控件。

截至2010年9月2日,新增:

谢谢你的帮助。 基本上它是描述如何执行它的MSDN Library文章。

  • 我已设法设置并运行第二个实例(没有太多要理解如何做到这一点)。
  • 它只在我的情况下失败,因为第二个VS2010实例(调试设计时)无法找到我的自定义控件的符号。 我在Debugging / symbols下手动添加了符号。 没有结果,仍然“因为缺少符号而不会打破断点”

顺便说一句,使用这种方法,从符号加载(通过模块窗口)中排除一些东西是有帮助的,因为这将安全很多时间。

现在,如果必须弄清楚如何解决符号,那么我可以解决这个问题…..

自定义控件的绝大多数设计时问题都是由在设计时运行的控件中的事件处理程序或方法覆盖中的代码以及运行时引起的。 这通常是可取的,例如,当您在“属性”窗口中更改属性时,您会收到即时反馈。

但是当代码依赖于在运行时可用但在设计时不可用的东西时,这是不可取的。 像dbase连接或存储在构建文件夹中的文件。 这可能会产生exception,并且Visual Studio在设计时不能很好地处理exception。 最糟糕的情况是,您可以在没有任何诊断的情况下将VS崩溃到桌面。 但一切皆有可能。

查看控件中的代码,确保应在运行时运行的代码位包装如下:

if (!DesignMode) { // etc.. } 

可以使用此MSDN Library文章中的调试技巧来诊断硬案例。

要在设计模式下调试控件,需要两个Visual Studio实例。 在第一个实例中,打开包含此控件源代码的项目。 在Project Properties,Debugger中,设置命令行调用另一个Visual Studio实例(msdev?不完全知道VS2010 – 从快捷方式中取出),然后执行“Start Debugging”命令。 另一个Visual Studio实例启动。 在这种情况下,打开客户端项目,在窗体上使用您的控件。