我正在尝试在其中一个项目中打开用户控件。我相信它是在VS 2003中创建的,该项目已经转换为VS2008。我可以很好地查看代码,但是当我尝试加载设计器视图时,VS停止响应,我必须使用任务管理器关闭它。我试过让它运行几分钟,但它没有做任何事情。我跑了“devenv / log”,但在日志中没有看到任何异常。我无法在任何地方找到具体的错误消息。知道问题可能是什么?我可以使用轻量级编辑模式吗?
我需要查看此控件的可视化表示的原因是决定在哪里插入一些新组件。
我尝试使用谷歌搜索并搜索,但要么我不知道要搜索什么,或者没有任何关于此的内容。任何帮助表示赞赏。
(最奇怪的是,用户控件似乎在另一个引用的项目中正常加载,但是当我甚至在该项目中点击它时,VS就会崩溃。)
修改
用户控件是第三方HTML编辑器的包装器......所以不一定是访问数据库的东西。
我只是尝试将控件放在一个新项目上,一旦我将它拖到表单上就会崩溃。
答案 0 :(得分:14)
我使用此处描述的技术解决了我的崩溃设计师:
Good Way to Debug Visual Studio Designer Errors
我已经能够通过运行VS的第二个实例调试一些控制设计器问题,然后从第一个VS实例执行“Debug - > Attach to Process”并选择“devenv”。
和
似乎UserControls的Load()方法以某种方式被设计者解析。将初始化和其他可疑代码放入if循环中 - 检查 IsDesignMode 可防止设计人员阅读会导致崩溃的代码....
- 更新:现在回顾一下,当我推翻/重构应用程序设计时,所有大多数事情都解决了。
答案 1 :(得分:11)
您的用户控件可能具有如下所示的属性:
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所指出的,这不会产生编译器警告或错误。
答案 2 :(得分:3)
像这样的挂起通常与网络相关联。也许是数据库。您必须注意在设计时在UserControl内运行的代码。不仅是构造函数,还有Load事件,计时器,OnHandleCreated,OnResize等。避免运行该代码的方法是测试DesignMode属性,当它为真时不要做任何危险。
您的最终回退是使用另一个Visual Studio实例debug the code at design time。
答案 3 :(得分:2)
为了跟进子宫的帖子,我找到了以下代码来帮助阻止VS崩溃并阅读onLoad函数。
我无法回复,也不想添加新评论。您可以在Load方法中使用以下内容并阻止VS读取它并崩溃。这取自this article
bool isDesignMode = (System.Diagnostics.Process.GetCurrentProcess().ProcessName.IndexOf("devenv") != -1);
if (isDesignMode)
return;
答案 4 :(得分:1)
我遇到了同样的问题。在我的例子中,问题是(我认为)我在声明中而不是在构造函数中初始化成员数组。错误是当我尝试使用我的lib中具有“坏”声明的自定义控件时,我的应用程序的VisualStudio项目立即崩溃。
令人沮丧的是因为我的自定义组件lib编译时没有错误。
布鲁克
崩溃的代码:
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
}
答案 5 :(得分:1)
对我来说,有助于在项目设置中将Target Framework从“.Net Framework 4 Client Profile”更改为“.Net Framework 4”。
答案 6 :(得分:0)
尝试注释部分甚至是控件的完整构造函数,看看它是否显示出来。也许这是另一个初始化也失败了。
答案 7 :(得分:0)
完成所有操作后,我还会尝试在一个全新的项目中加载用户控件,看看它是否正确加载;如果确实如此,那么你可以“决定在哪里插入一些新组件”......只是大声思考!
答案 8 :(得分:0)
在Visual Studio中创建自己的用户控件时遇到了类似的问题,但是通过以下步骤可以正确显示用户控件:
这些都是非常基本的东西,我打赌你已经尝试过了。把它扔到那里。
答案 9 :(得分:0)
我也遇到过这个问题。我有一个包含用户控件的项目(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讨厌我。
答案 10 :(得分:0)
我在IDE崩溃/重盯VS时遇到问题。
这特定于我使用的客户设计器(从ParentControlDesigner继承),我曾经应用过 EnableDesignMode (以及一些智能标记的工作)。
我的问题VS在将我的用户控件添加到表单时崩溃(这是一个大程序,我有很多自定义和用户控件)仅在使用 EnableDesign 时才发生-建议停止使用问题。事实证明,这是用户控件中一个简单的属性,它设置了基础自定义控件的属性(将自身作为子自定义控件的引用,而不是递归问题)。我不知道为什么这有所作为,但是它确实起作用了,或者至少当我将其删除时,它现在正在起作用。
当我从IDE中的表单中删除用户控件(卸载)时,我遇到的另一个问题再次是仅,这是由于包含了Designer。通过在用户用户控件处理事件中添加特定的处理来解决该问题,该事件用于处理EnableDesign中提到的项目。
通过第二个VS实例进行的调试并没有提供任何帮助(它只是在出错之前表示Stackoverflow,并且与下一条逻辑行无关),但确实提供了有关一般关注领域的线索。这个问题花了我几天的时间,因此在这里提供报告以防万一。
不用说我的程序在实际运行时仍然能够始终正常运行,因此这纯粹是设计者/ VS IDE的问题。