Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从winforms工具箱添加控件时引发错误_C#_.net_Winforms_Toolbox - Fatal编程技术网

C# 从winforms工具箱添加控件时引发错误

C# 从winforms工具箱添加控件时引发错误,c#,.net,winforms,toolbox,C#,.net,Winforms,Toolbox,我正在windows窗体中使用自定义控件。自定义控件的dll安装在GAC中。我已将此自定义控件添加到工具箱中 将此自定义控件从工具箱拖动到winforms designer时,出现以下错误: 未能创建组件“UserControl”。错误消息如下: 'System.Runtime.InteropServices.COMException 0X80004005:错误 对组件的调用返回了HRESULT E_FAIL 在VSLangProj.References.AddString bstrPath

我正在windows窗体中使用自定义控件。自定义控件的dll安装在GAC中。我已将此自定义控件添加到工具箱中

将此自定义控件从工具箱拖动到winforms designer时,出现以下错误:

未能创建组件“UserControl”。错误消息如下: 'System.Runtime.InteropServices.COMException 0X80004005:错误 对组件的调用返回了HRESULT E_FAIL

在VSLangProj.References.AddString bstrPath

这项工作:

1将部件的本地引用添加到工具箱并将其拖动到窗体中,操作正常

2在项目中添加对dll的引用也可以解决此问题

问题:

当程序集添加到GAC时,如何使我的用户控件显示在designer中?我是否遗漏了AssemblyInfo.cs文件中的任何参数或遗漏的某些内容

编辑:

进一步分析后,我发现如果提供的位置中不存在dll,则会发生此错误。例如,如果我将d:\Location1\UserControl.dll中的程序集添加到工具箱中,则在拖动控件时将引发此异常,如果我在将其添加到工具箱后从此位置移除dll


因此,我使用VisualStudioDeveloper命令提示符检查了这个程序集是否仍然存在于GAC中,并发现dll存在于GAC中。但仍然找不到异常抛出的原因

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

在Visual Studio可以找到依赖DLL的地方提供这些DLL当然是一项困难的要求。摸索这一点通常不会产生如此模糊的异常。如果要深入查看它,然后启动另一个Visual Studio实例,请使用“工具+附加到进程”将其附加到第一个实例,使用“调试+异常,抛出”复选框在抛出异常时强制调试器介入。“调用堆栈”窗口应该给出一些提示,请记住它被隐藏在设计器代码中,因此它不一定是水晶色的。@HansPassant,谢谢您的建议,我会尝试的it@HansPassant,它不会在本次设计时中断,除非尝试,您是否在单击“选择项目”选项后出现的“工具箱”对话框中选中了“目录”选项卡。如果控件是从GAC添加到dll的,则“目录”选项卡将显示全局程序集缓存;如果控件是手动添加到dll的,则“目录”选项卡将显示全局程序集缓存