Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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
.Net设计器程序集,C++\C#错误 我正在设计一个设计器重的应用程序(使用Visual C++ 2,但C的解决方案仍然是相关的)。我的设置如下:_C#_.net_Winforms_Visual C++_Designer - Fatal编程技术网

.Net设计器程序集,C++\C#错误 我正在设计一个设计器重的应用程序(使用Visual C++ 2,但C的解决方案仍然是相关的)。我的设置如下:

.Net设计器程序集,C++\C#错误 我正在设计一个设计器重的应用程序(使用Visual C++ 2,但C的解决方案仍然是相关的)。我的设置如下:,c#,.net,winforms,visual-c++,designer,C#,.net,Winforms,Visual C++,Designer,我有一个名为“主机”的用户控件 我正在尝试一个名为“Child”的用户控件 子级包含一个类的属性,该类的类型完全在另一个dll中定义,名为“mytools.dll” Child在designer中工作得很好。但是,当我从设计器中将“child”拖到“host”上时,会出现以下错误: Failed to create component 'Child'. The error message follows: 'System.io.filenotfoundexception: could not

我有一个名为“主机”的用户控件 我正在尝试一个名为“Child”的用户控件

子级包含一个类的属性,该类的类型完全在另一个dll中定义,名为“mytools.dll”

Child在designer中工作得很好。但是,当我从设计器中将“child”拖到“host”上时,会出现以下错误:

Failed to create component 'Child'.  The error message follows:  'System.io.filenotfoundexception: could not load file or assembly MyTools, Version XXXXXX, Culture=neutral
.....
{unhelpful callstack}
如果我在“child”中注释掉指向mytools.dll中的类的属性,那么一切设计都很完美。我将属性标记为“Browsable(false)和DesignerSerializable(hidden)”,但这并没有帮助

有没有一种方法可以让我明确地说“不要加载这个dll,你在设计时不需要它”,或者让我用某种方式强制从设计器以编程方式加载dll


谢谢!

UserControl有一个DesignMode属性,但我不确定.NET是否希望事先解析该类型(即,如果DesignMode==true,则返回null)


或者,如果您是唯一的开发人员,则可以处理AppDomain.CurrentDomain.AssemblyResolve事件并自己加载虚拟程序集。

否,这里存在鸡和蛋的问题。为了找到您应用的属性,设计器必须使用反射来加载类型。加载类型需要其me使用的任何类型这将导致CLR查找mytools.dll程序集

在设计时有效的探测路径是Visual Studio的路径,而不是你的应用程序的路径。我不清楚该路径到底是什么样子的。工具箱也起到了作用。它在私有目录中复制包含控件的程序集。要查看的位置是c:\users\yourname\appdata\local\microsoft\visualstudio\9.0\projectassemblies。这通常会出错,并且会在该目录中留下散乱的副本。当我注意到工具箱初始化开始变慢时,我必须不时手动清理它


好的,您可以检查mytools.dll的副本是否也存在,并且不是旧版本。将其放入GAC是避免出现问题的一种方法。

如果属性标记为“public”,则UserControl将强制设计器加载外部程序集


您必须修改控件以返回对象,而不是错误的类型,如果必须将其保持为公共类型,则执行类型转换,否则,受保护应该可以。

我已经执行了一些过期操作,如果我将上面的属性设置为私有或受保护,则设计器不会尝试加载dll。我正在进行研究,以有效地找出原因现在…这似乎是问题所在。我仍然希望我的财产是公开的,但将不得不做一个黑客工作,以避免设计师试图加载第三个组件。