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

时间:2010-09-01 18:12:13

标签: c# visual-studio-2010 user-controls

C#,VS2010,WinForm应用程序:

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

  

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

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

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

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

截至2010年9月2日,补充道:

感谢您的帮助。基本上它是描述如何操作的MSDN Library文章。

  • 我设法设置它并运行第二个实例 (没有太多要理解如何做到这一点)。
  • 它只在我的情况下失败,因为第二个VS2010实例(调试设计时间)无法找到 我的自定义控件的符号。我在Debugging / symbols下手动添加了符号。没有 结果,仍然“由于缺少符号而不会打破断点”
顺便说一句,使用这种方法,从符号加载(通过模块窗口)中排除一些东西是有帮助的,因为这将安全很多时间。

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

2 个答案:

答案 0 :(得分:15)

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

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

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

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

可以使用此MSDN Library article中的调试提示来诊断疑难病例。

答案 1 :(得分:13)

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