我在Windows窗体中使用自定义控件。自定义控件的dll安装在GAC中。我已将此自定义控件添加到我的工具箱中。从winforms工具箱添加控件抛出错误
当我拖到从工具箱到的WinForms设计师,我得到以下错误此自定义控件:
Failed to create component 'UserControl'. The error message follows: 'System.Runtime.InteropServices.COMException (0X80004005): Error HRESULT E_FAIL has been returned from a call to a component.
at VSLangProj.References.Add(String bstrPath) ...................................
这工作:
1)将装配到工具箱和拖动一个局部引用它的形式工作正常。
2)添加到项目中也解决了问题
问题DLL的引用:
我怎样才能让我的用户控制显示在设计时组件添加到GAC?是否错过了AssemblyInfo.cs文件中的任何参数或者我错过了什么。
编辑:
在进一步的分析,我发现,如果DLL中不存在所提供的位置会发生这种错误。例如,如果我将d:\Location1\UserControl.dll
的程序集添加到工具箱中,则在拖动控件时,如果在将该DLL添加到工具箱后将其从该位置移除,则会引发此异常。
因此,我使用visual studio developer命令提示符检查了这个程序集是否仍然存在于GAC中,并且发现该dll存在于GAC中。但仍然无法找到为什么异常抛出
在Visual Studio可以找到它们的地方提供依赖的DLL当然是一个很难的要求。摸索这通常不会产生这样一个绝望的模糊例外。如果您想深入研究,则启动Visual Studio的另一个实例,使用工具+附加到进程以将其附加到第一个实例,使用Debug + Exceptions,Thrown复选框在抛出异常时强制调试器进入。 Call Stack窗口应该提供一些提示,请记住它被埋在设计器代码中,因此它不一定是水晶。 – 2014-10-16 13:34:42
@HansPassant,感谢您的建议将尝试 – Kira 2014-10-17 03:55:50
@HansPassant,它不会在这个设计时间中断例外 – Kira 2014-10-17 04:05:05