【问题标题】:VS 2010 - Error when opening User Control / Form with DesignerVS 2010 - 使用设计器打开用户控件/表单时出错
【发布时间】:2010-09-01 18:12:13
【问题描述】:

C#、VS2010、WinForm 应用程序:

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

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

根据我的经验,我可以说,它通常是我的代码中没有正确初始化的东西,例如未设置在运行时以某种方式可用的属性,但在使用设计器打开时不可用。唯一的问题是,根本原因很难找到。

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

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

截至 2010 年 9 月 2 日添加:

感谢您的帮助。基本上它是 MSDN Library 文章描述如何做到这一点。

  • 我已成功设置并运行第二个实例 (没有太多了解如何做到这一点)。
  • 仅在我的情况下失败,因为第二个 VS2010 实例(调试设计时间)无法找到 我的自定义控件的符号。我已经在调试/符号下手动添加了符号。不 结果,仍然“由于缺少符号,断点不会被命中”

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

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

【问题讨论】:

  • 使用 VS2010 的第二个实例进行设计时调试工作,我的 dll 符号仍然存在问题。我已经在这里(stackoverflow.com/questions/3687840/…)发布了这个,一旦我知道了,我也会在这里发布解决方案。

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


【解决方案1】:

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

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

查看控件中的代码,并确保应该在运行时运行的代码位是这样包装的:

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

疑难病例可以通过MSDN Library article中的调试提示进行诊断。

【讨论】:

  • 感谢汉斯的反馈。首先,我必须先找到根本原因,然后才能利用“DesignMode”条件。但是,MSDN文章描述了如何做到这一点,只需要弄清楚符号问题(如原始帖子中所述)
  • 我会肯定反其道而行之。
  • 解决了大部分情况,但仍有一些情况。
  • 如果是 WPF 控件,您可以使用if (DesignerProperties.GetIsInDesignMode(TextBox))
  • 如果您将代码放在 Initializer (Public Sub New()) 形式中,最好使用If System.ComponentModel.LicenseManager.UsageMode = System.ComponentModel.LicenseUsageMode.Runtime Then 'Add your code here' End If
【解决方案2】:

要在设计模式下调试您的控件,您需要两个 Visual Studio 实例。首先,打开包含此控件源代码的项目。在项目属性的调试器中,设置调用另一个 Visual Studio 实例的命令行(msdev?不完全了解 VS2010 - 从快捷方式中获取),然后执行“开始调试”命令。另一个 Visual Studio 实例启动。在这种情况下,打开使用您在表单上的控件的客户端项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多