Visual Studio 2005-无法在设计器上打开表单
我的团队在托管C ++的Visual Studio 2005上开发了一个GUI应用程序。由于某些交付,即使未更改源代码和项目设置,也无法在设计器中打开表单。设计器报告此错误:
引发了类型为'System.OutOfMemoryException'的异常。
在Microsoft.VisualStudio.Design.VSDynamicTypeService.ShadowCopyAssembly(String fileName)
在Microsoft.VisualStudio.Design.VSDynamicTypeService.CreateDynamicAssembly(字符串codeBase)
在Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.get_Assembly()
在Microsoft.VisualStudio.Design.VSTypeResolutionService.AssemblyEntry.Search(String fullName,String typeName,Boolean ignoreTypeCase,Assembly&assembly,String描述)
...
我们成功地重新编译了该项目,但仍然遇到此问题。
任何的想法?
解决方案
这是一个很大的尝试,但是请尝试连续几次关闭和打开设计器。我在CWindows窗体设计器(VS2005)中遇到了同样的问题:窗体通常最终正确打开(经过5次尝试,相当一致)。
这就是我用来调试这些问题的方法,启动Visual Studio的第二个实例,加载项目并添加到也加载了项目的第一个实例。现在,在构造函数和Page Load事件中设置断点,并在第二个实例中的窗体中设置任何自定义绘制事件,并在第一个实例中尝试打开设计器,这些断点应该会命中,并且我们应该能够看看发生了什么事。
我怀疑我们有一个设计模式错误,其中有关的窗体上发生了无限循环(或者递归控件创建)。
帮助我解决Windows窗体上此类错误的一件事是:
- 打开GUI应用程序的Visual Studio 2005解决方案。暂时不要打开表格
- 打开Visual Studio 2005的另一个实例
- 在第二个实例中,将devenv.exe的第一个实例添加(调试->添加到进程)到调试器。确保异常(调试->异常)的" Thrown"下的所有异常复选框均已选中。
- 现在转到第一个VS2005实例并打开表单。第二个VS2005实例将在发生错误的行停止。
在使用大型多项目解决方案或者具有非常大和复杂的Windows窗体的项目时,我会间歇性地遇到相同的问题。
通过启用Visual Studio使用超过2GB的内存,我能够解决此问题。这是过程...
(注意:这假设XP和Visual Studio 2005 Vista和/或者VS2008将需要稍作更改)
编辑Boot.ini
用鼠标右键单击我的电脑,属性,高级选项卡。在"启动和恢复"下,单击"设置"。单击"编辑"按钮,然后将/ 3GB开关添加到[operating systems]行的末尾:
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /3GB
使Visual Studio"大地址意识"
运行Visual Studio命令提示符,然后转到IDE目录:
cd %ProgramFiles%\Microsoft Visual Studio 8\Common7\IDE
使用Microsoft工具editbin修改devenv.exe:
editbin /LARGEADDRESSAWARE devenv.exe
现在重新启动,我们就完成了!