用户控件总是使 Visual Studio 崩溃

Posted

技术标签:

【中文标题】用户控件总是使 Visual Studio 崩溃【英文标题】:User control always crashes Visual Studio 【发布时间】:2011-02-09 11:16:00 【问题描述】:

我正在尝试在我们的一个项目中打开用户控件。我相信它是在 VS 2003 中创建的,并且该项目已转换为 VS2008。我可以很好地查看代码,但是当我尝试加载设计器视图时,VS 停止响应,我必须使用任务管理器将其关闭。我试过让它运行几分钟,但它什么也没做。我运行了“devenv /log”,但在日志中没有看到任何异常。我在任何地方都找不到特定的错误消息。知道问题可能是什么吗?有没有我可以使用的轻量级编辑模式之类的?

我需要查看此控件的可视化表示的原因是决定在哪里插入一些新组件。

我试过用谷歌搜索它并搜索 SO,但要么我不知道要搜索什么,要么没有任何关于此的内容。任何帮助表示赞赏。

(最奇怪的是,用户控件似乎在另一个引用的项目中加载良好,但只要我在该项目中单击它,VS就会崩溃。)

编辑

用户控件是第 3 方 html 编辑器的包装器...所以不完全是访问数据库的东西。

我刚刚尝试将控件放在一个新项目上,但我一将它拖到窗体上它就崩溃了。

【问题讨论】:

@Nick:您能否编辑您的问题并告诉我们有关您的用户控件的更多信息,它的作用是什么?它是否引用了任何外部资源,例如数据库、日志文件等? 【参考方案1】:

我使用这里描述的技术解决了我崩溃的设计师:

Good Way to Debug Visual Studio Designer Errors

我已经能够通过运行 VS 的第二个实例来调试一些控件设计器问题,然后从您的第一个 VS 实例执行“调试 -> 附加到进程”并选择“devenv”。

似乎 UserControls 的 Load() 方法以某种方式被设计器解析了。将初始化和其他可疑代码放入 if 循环中 - 检查 IsDesignMode 可防止设计人员读取会导致其崩溃的代码 ....

--update: 现在回想起来,当我过度考虑/重构应用程序设计时,所有的事情都解决了。

【讨论】:

救命稻草!!!!!!我一直在为这个问题拉头发!!!!谢谢@word :) 第二个人推荐这个“附加到进程”的东西。但是添加 userControl 时我的应用程序崩溃了。所以我无法调试,因为“附加到进程”也在开始配音本身。在这种情况下,我没有放置 userControl.... C4ud3x 无法遵循您所说的“本身”;)您运行 VS 的第二个实例,然后附加到进程 dev.env,然后将您的用户控件插入 VS 的第一个实例 -> 然后两个 VS死了吗? 在 OnLoad() 中检查 DesignMode 解决了我的问题,谢谢。 设计模式...?你当时做了什么……?你有什么改变吗?【参考方案2】:

你的用户控件可能有这样写的属性:

private int myPropName; // note the lowercase m
public int MyPropName  get  return MyPropName;   // the property is returned
                                                     // instead of the variable

请注意,get 返回的值是属性本身。这会在尝试查看控件的属性时使 VStudio 2008 崩溃,在将控件(通过拖放或其他方式)添加到表单时也会发生这种情况。

正如 NickAldwin 所指出的,这不会产生编译器警告或错误。

【讨论】:

但这也应该导致编译器错误/警告,我没有得到。 宾果游戏。我有这个,它实际上抛出了一个 *** 但显然只有在调用 getter 时。修复这个修复了我的设计师崩溃。很遗憾我在卸载之前没有找到这个..重新安装一两天。DERP。 我很尴尬地承认在我偶然发现这个答案之前,我调试了 VS 崩溃了多长时间。谢谢! 只是犯了同样的愚蠢错误(我从不这样做,我总是返回成员变量而不是属性 - 我什至不明白我的大脑如何/为什么这样输入它)。在 Visual Studio 连续崩溃 20 分钟后,我根据您的帖子进行了仔细检查。你太棒了! 浪费了数小时寻找这次崩溃的根源......谢谢!【参考方案3】:

为了跟进 womb 的帖子,我找到了以下代码来帮助阻止 VS 崩溃和读取 onLoad 函数。

我无法回复,也不想添加新评论。您可以在 Load 方法中使用以下内容并阻止 VS 读取它并使其崩溃。取自this article

bool isDesignMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName.IndexOf("devenv") != -1);
            if (isDesignMode)
                return;

【讨论】:

这是一个救生员。我一直在寻找这个问题几天没有结果:(【参考方案4】:

像这样的挂起通常与网络有关。也许是一个数据库。您必须注意在设计时在 UserControl 内运行的代码。不仅是构造函数,还有 Load 事件、计时器、OnHandleCreated、OnResize 等。避免运行该代码的方法是测试 DesignMode 属性,当它为 true 时不要做任何危险的事情。

您的最终后备方案是使用另一个 Visual Studio 实例使用 debug the code at design time。

【讨论】:

+1 用于调试另一个 VS 实例,这对我有用。 我尝试用另一个 VS 实例进行调试,但它似乎根本没有到达我的代码!如果我打破所有,它要么处于“等待”状态,要么表示没有为任何调用堆栈帧加载任何符号......【参考方案5】:

我遇到了同样的问题。就我而言,问题是(我认为)我在声明中而不是在构造函数中初始化成员数组。错误是当我尝试使用我的库中具有“错误”声明的自定义控件时,我的应用程序的 VisualStudio 项目立即崩溃。

这很令人沮丧,因为我的自定义组件库编译时没有错误。

布鲁克

崩溃的代码:

class MyCustomObject: UserControl

  private List<int> myList = new <int>List();
   public MyCustomObject()
      InitializeComponent();
     

// other code here
 

解决方案

class MyCustomObject: UserControl

   private List<int> myList;
   public MyCustomObject()
        InitializeComponent();
        myList= = new <int>List();
     

// other code here
 

【讨论】:

【参考方案6】:

对我来说,有助于在项目设置中将 Target Framework 从“.Net Framework 4 Client Profile”更改为“.Net Framework 4”。

【讨论】:

【参考方案7】:

尝试注释掉控件的部分甚至完整的构造函数,看看它是否显示出来。也可能是另一个初始化失败。

【讨论】:

注释掉构造函数中的所有内容并不能阻止它崩溃。不过感谢您的建议!【参考方案8】:

在你做完这一切之后,我也会尝试在一个全新的项目中加载用户控件,看看它是否正确加载;如果是这样,那么您可以“决定在哪里插入一些新组件”......只是大声思考!

【讨论】:

【参考方案9】:

我在 Visual Studio 中创建自己的用户控件时遇到了一些类似的问题,但是通过执行以下步骤能够使用户控件正确显示:

    构建或重建项目/解决方案 关闭 Visual Studio 并重新打开

这些都是非常基本的东西,我敢打赌你已经尝试过了。直接扔了。

【讨论】:

【参考方案10】:

最近我在创建用户控件并通过设计器将其附加到表单后遇到烦人的错误,每当附加用户控件的相同表单的设计模式时,Visual Studio 2010 总是会崩溃。

在创建了这么多次和大量实验后,我通过以下方式解决了我的问题:

1 - 将新的 class.cs 文件添加到项目中 2 - 移动我添加到用户控件本身的所有额外支持类 3 - 我认为这更重要:将所有在 User_Control 上连接事件的自定义委托移动到新添加的文件。 4 - 删除 User_Control.Load 事件。

我希望这可以帮助某人。

干杯

【讨论】:

【参考方案11】:

我也遇到过这个问题。我有一个包含用户控件的项目(ProjA)和另一个引用这些用户控件的项目(ProjB)。我发现每次尝试添加特定用户控件时,vb.net 环境都会关闭并重新加载我的解决方案。 但是,如果我注释掉包含在我的控件 LOAD 事件中的代码

 Private Sub SampleDisplayBox_Load(sender As Object, e As EventArgs) Handles Me.Load
        'AddHandler Sample.Sample_Reloaded, AddressOf reload
        'AddHandler Sample.Sample_Cleared, AddressOf SampleCleared
        'AddHandler My.Settings.SettingsSaving, AddressOf UpdateColors
        'UpdateColors()
        'reload()

    End Sub

然后重新构建我的解决方案,我在将此控件添加到表单时没有遇到任何问题。很奇怪,当我在同一个项目中有 7 个其他控件都以相同的方式运行且没有错误时,这个问题只出现在一个控件中。

就我个人而言,我认为 VB.NET 讨厌我。

【讨论】:

没关系。现在它也失败了,代码也被注释掉了。我哪里做错了? 成功了!反正我的。 我的用户控件引用了某个类作为属性。让我们称之为“人”。所以我的班级(Person)可能有一个属性(Relative AS New Person) 【参考方案12】:

我遇到了 IDE 崩溃/重启 VS 的问题。

这是特定于我使用客户设计器(继承自 ParentControlDesigner),我曾经应用 EnableDesignMode(以及一些智能标签工作)。

只有在使用 EnableDesign 时才会出现我的问题 VS 在将我的用户控件添加到表单时崩溃(这是一个大程序,我有很多自定义和用户控件) - 停止评论问题。事实证明,这是用户控件中的一个简单属性,它设置了基础自定义控件的属性(将其自身作为子自定义控件的引用,因此不是递归问题)。我不知道为什么这会有所作为,但确实如此,或者至少在我删除它时它现在可以工作了。

我遇到的另一个问题是,当 从 IDE 中的表单中删除用户控件(卸载)时,由于包含设计器,再次。这已通过在用户用户控件 dispose 事件中添加特定 dispose 来解决,该事件释放 EnableDesign 中提到的项目。

通过第二个 VS 实例进行调试并没有提供尽可能多的帮助(它只是在出错之前说 *** 并且与下一个逻辑行无关),但它确实提供了一般关注领域的线索。这个问题花了我几天时间,因此我在这里报告以防它对某人有所帮助。

不用说,我的程序在实际运行时始终能正常运行,因此这纯粹是设计器/VS IDE 的问题。

【讨论】:

EnableDesign 属性从何而来?我在这里一无所获....

以上是关于用户控件总是使 Visual Studio 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

将基本 UserControl 的修饰符设置为受保护时,Visual Studio 崩溃

Visual Studio 控制台程序在 control-c 后崩溃

DXperience 工具箱不显示/ Visual Studio 2012选择项打开崩溃

visual studio里插flash要放啥控件

怎么用microsoft visual studio制作一个选择题

visual studio 2005中win form 中控件背景颜色透明问题