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

Hor*_*ter 12 c# user-controls visual-studio-2010

C#,VS2010,WinForm应用程序:

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

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

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

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

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

截至2010年9月2日,增加了:

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

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

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

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

Han*_*ant 15

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

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

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

if (!DesignMode) {
    // etc..
}
Run Code Online (Sandbox Code Playgroud)

可以使用此MSDN Library文章中的调试提示来诊断硬案例.


Ale*_*x F 13

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