2014-10-16 38 views
0

我在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中。但仍然无法找到为什么异常抛出

+0

在Visual Studio可以找到它们的地方提供依赖的DLL当然是一个很难的要求。摸索这通常不会产生这样一个绝望的模糊例外。如果您想深入研究,则启动Visual Studio的另一个实例,使用工具+附加到进程以将其附加到第一个实例,使用Debug + Exceptions,Thrown复选框在抛出异常时强制调试器进入。 Call Stack窗口应该提供一些提示,请记住它被埋在设计器代码中,因此它不一定是水晶。 – 2014-10-16 13:34:42

+0

@HansPassant,感谢您的建议将尝试 – Kira 2014-10-17 03:55:50

+0

@HansPassant,它不会在这个设计时间中断例外 – Kira 2014-10-17 04:05:05

回答

0

我试图重现您的方案。我在工具箱中创建了一个新的GAC选项卡,并且将dll从其'GAC位置拖放到该选项卡,而不是将其部署到GAC的驱动器上的原始位置(如果我理解正确的话)。没有任何错误。使用Microsoft Visual Studio 2010 Ultimate,版本10.0.40219.1 SP1Rel,Microsoft .NET Framework版本4.5.50938 SP1Rel。

+0

感谢您的尝试,您是否在点击“选择项目”选项后出现的工具箱对话框中检查目录选项卡。目录选项卡将显示“全局程序集缓存”,如果该控件是从GAC添加的,或者是某个位置添加到了dll,如果手动添加 – Kira 2014-10-17 03:54:13

相关问题