Visual studio 设计器拒绝用户控件 我有一个使用/CLR编译的C++控件库项目。在这个项目中有一个用户控件,可以调用本机DLL。此用户控件按其应有的方式出现在设计器工具箱中,但我无法将其拖到窗体上。没有对DLL的引用,用户控件可以很好地使用,但是有了这个引用,我在尝试使用它时只会收到消息“加载工具箱项失败”

Visual studio 设计器拒绝用户控件 我有一个使用/CLR编译的C++控件库项目。在这个项目中有一个用户控件,可以调用本机DLL。此用户控件按其应有的方式出现在设计器工具箱中,但我无法将其拖到窗体上。没有对DLL的引用,用户控件可以很好地使用,但是有了这个引用,我在尝试使用它时只会收到消息“加载工具箱项失败”,visual-studio,dll,user-controls,c++-cli,designer,Visual Studio,Dll,User Controls,C++ Cli,Designer,本机调用是功能性的,并且无论如何都不会损害用户控件。用户控件可以在包含DLL调用的设计器中自行查看。另外,如果控件手动添加到窗体并作为程序执行,它也将显示为fine 这让我怀疑问题只是VisualStudioDesigner需要知道本机DLL的位置。但我不知道如何告诉它,或者把DLL放在哪里,以便它可以找到它。据我所知,在项目设置中无法引用本机DLL。所以对我来说,设计师只是抱怨是有道理的,因为它不能改善它 有什么办法可以让这一切顺利进行吗?尝试一下: VS2010:将dll复制到程序文件\Mi

本机调用是功能性的,并且无论如何都不会损害用户控件。用户控件可以在包含DLL调用的设计器中自行查看。另外,如果控件手动添加到窗体并作为程序执行,它也将显示为fine

这让我怀疑问题只是VisualStudioDesigner需要知道本机DLL的位置。但我不知道如何告诉它,或者把DLL放在哪里,以便它可以找到它。据我所知,在项目设置中无法引用本机DLL。所以对我来说,设计师只是抱怨是有道理的,因为它不能改善它

有什么办法可以让这一切顺利进行吗?

尝试一下:

VS2010:将dll复制到
程序文件\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblys
文件夹中


VS2008、VS2010:将dll复制到
AppData\Local\Microsoft\VisualStudio\\ProjectAssemblies\
文件夹。

我觉得,引用本机dll的控件失败,因为Visual Studio无法加载它。运行PATH环境变量时,请尝试全局或为Visual Studio可执行文件设置该环境变量。如果这没有帮助,请尝试调试控件的设计时行为,您应该能够找到问题所在。

不幸的是,您在VS中遇到了“设计缺陷”(或者换句话说,是“功能”)

您认为问题在于VisualStudio设计人员需要知道本机DLL的位置,这在一定程度上是正确的。这并不是因为不知道它的位置,而是因为设计器无法反映混合模式程序集(包含托管代码和本机代码的程序集)以实例化控件。这导致工具箱显示您注意到的错误

解决方法是使用>CLR:Ungult编译C++源文件,创建纯管理exe。
另一种可能性(也是VS中的“设计缺陷”)是您试图添加的控件已编译为64位组件。因为VisualStudio是一个32位进程,所以它只能执行32位模块。虽然它允许您添加对64位程序集的引用,但它实际上无法JIT编译该64位程序集并在进程中执行它

这里的解决方法是使用“AnyCPU”设置编译用户控件程序集,这将导致它在32位环境中作为32位进程执行,在64位环境中作为64位进程执行。事实上,这是最好的两个世界,假设你写的代码是正确的



最后,如果这些都不起作用,那么总是可以选择绕过设计器。您仍然可以编写必要的代码来实例化用户控件,并在表单的初始值设定项中设置其属性。您将失去的只是在VisualStudio中使用设计器内部控件的能力。在运行时,一切都会按预期工作。

我发现这看起来像是一个类似的问题

所以微软似乎正式表示,从VS2008升级到VS2010是一种解决办法

你有没有找到不同的解决方法

<>这是我现在在VS2008中遇到的一个问题,使用一个托管C++ C++包项目使用一个非托管C++项目。
在我看来,VisualStudio正在使用的设计器临时程序集确实是个问题—它将检测到的依赖项包装程序集加载到临时文件夹中,但不会加载包装程序集的非托管依赖项。我可以在C:\Users\Username\AppData\Local\Microsoft\VisualStudio\9.0\ProjectAssembly中看到这一点。当我尝试加载设计器时,将在其中创建一个新文件夹,其中包含托管DLL,但不包含非托管依赖项。不幸的是,我无法理解上面Microsoft链接中的问题中的人所说的是使用$(TargetDir)的解决方法。

使用/DELAYLOAD链接您的库:“your_native.dll”选项。这为我解决了同样的问题

我遇到了一个类似于此的问题,可能与您的问题相同(谁知道可能是多少原因造成的?),基本上我无法将控件交给设计师,但现有控件在生产和测试中都运行良好

作为记录,我的解决方案如下:

1) 将解决方案设置更改为x86。这允许我将控件放在设计器上,移动它,等等。
2) 完成后,可以移回任何CPU或x64。我实际上只是使用设计器来简化一些值的设置,而整个32/64位的设置似乎会导致问题。

您可以在.Net中创建一个基类,并从这个基类继承cli类。表单现在可以引用这个基类,而不是直接引用cli类型。它欺骗了设计师。

VS 2010的问题还是VS 2008的问题?我们有一个类似的瘫痪问题,这导致我们回到VS2008…我在VS2008中遇到了这个问题。所以VS 2010在这方面并没有更好?我原以为将本机DLL添加到C:\Windows\System32路径可能会成功,但不幸的是,情况并非如此。这里也有同样的问题。我可以在不添加任何控件或代码的情况下创建用户控件。但我不能把它放在表单上。我的用户控件与表单在同一个项目中。这是我在过去一周内看到的第三个关于此的投诉。下雨了,倾盆大雨,之前什么都没有。对任何受影响的人:提及我使用了什么样的软件或更新