找不到类型'xxx.xxx.xxx'。请确保装配

时间:2013-09-25 15:42:43

标签: .net vb.net visual-studio-2012 visual-studio-designer

当我尝试打开一个在不同项目中引用UserControl的表单时,我搜索了StackOverflow并发现了类似的问题。

我得到“为了防止在加载设计器之前可能丢失数据,必须解决以下错误:”与以下两个错误相关的消息:


找不到类型'MyNamespace.CommonUi.InformationBox'。请确保引用包含此类型的程序集。如果此类型是开发项目的一部分,请确保使用当前平台或任何CPU的设置成功构建项目。


变量'​​InformationBox1'未声明或从未分配。

InformationBox1是设计器中表单上的用户控件InformationBox的一个实例 - 它只是被引用为;

Friend WithEvents InformationBox1 As MyNamespace.CommonUi.InformationBox

“MyNamespace.CommonUi”项目成功构建。

我在项目中得到智能感知,所以我有理由相信它被正确引用。

到目前为止,和其他人一样:

这是一个已经从VS2005中的.NET2 / x86迁移到VS2012中的.NET4 / x64的项目。

现在,当解决方案在64位下运行时,它不起作用,我得到了这个设计器错误。但是,如果我将它切换到32位(技术上称为AnyCPU),我可以很好地打开设计器。

我已经阅读了类似线程中的其他建议,但是他们没有看到提供任何解决方案(我甚至已经走了“将其左移和右移以重建”选项)< / p>

13 个答案:

答案 0 :(得分:49)

我认为问题在于Visual Studio本身是32位,并且不能对64位的某些组件(例如ListView)进行GUI编辑。 例如。在具有ListView的表单上,您需要将解决方案更改为32位以编辑GUI。

所以答案就是,当你面对这个问题时:

  1. 将解决方案更改为32位
  2. 清理并重建解决方案
  3. 打开GUI进行编辑
  4. 保存,将解决方案更改回64位
  5. 清理并重建
  6. 以64位运行
  7. 有关详细信息,请参阅此问题。

    VS 2010 designer error 'Could not find type XYZ' in Windows7. Works fine in XP

答案 1 :(得分:13)

我有这个问题。它只发生在一个表单设计器视图中,尽管它能够在运行时编译,启动,显示此表单并在设计器模式下显示其他表单/控件。

这些步骤没有帮助:

  • 清洁&amp;重建
  • 重新开始工作室
  • 删除所有bin和obj目录
  • 删除和添加参考
  • 拒绝,愤怒,讨价还价,沮丧,接受
我的案例

解决方案

  1. 重命名缺少的类型(例如InformationBox =&gt; InformationBox2)
  2. 刷新设计师(WOW,它有效!)
  3. 将类型重命名为其初始名称

答案 2 :(得分:8)

将任何CPU更改为X86。您的控制是32位试图在64位机器上运行,但无法找到64位版本的控件。

答案 3 :(得分:4)

我最近在Visual Studio 2013中使用VB.Net时遇到了同样的错误,该自定义WinForm用户控件本身在同一项目中继承了自定义用户控件基类,并采取了一些措施来找出真正的原因是,在我的情况下,基类和子类都没有无参数构造函数(因为在这种情况下这不是一个有效的场景)。
为了解决这个问题,我添加了缺少的构造函数但将其保留为空(抛出NotImplementedException导致另一个阻止其显示的问题)。它不漂亮,但它有效。

为了通过此线程问题中列出的错误查看潜在错误,我必须执行以下操作:

  1. 清理整个解决方案
  2. 关闭Visual Studio
  3. 重新打开Visual Studio
  4. 重新打开解决方案
  5. 通过在解决方案资源管理器中右键单击解决方案来构建解决方案(不重建,不起作用)
  6. 在Designer模式下查看用户控件,现在显示实际错误
  7. 添加构造函数后,我不得不再次执行上述步骤以使其正常工作。

答案 4 :(得分:3)

我更改了一个包含多个项目的大型解决方案,以便从AnyCPU定位x64平台。尝试打开其中一个解决方案表单的设计者,该表单引用了其他项目中的控件,并获得了与OP相同的错误消息。打开包含控件的项目,看到它仍然以AnyCPU为目标。尝试了一个小时让它保存为x64而没有运气。我最终在记事本中打开了csproj文件,用x64替换了AnyCPU,这一切都开始工作了。希望这能帮助别人像我一样感到沮丧。

答案 5 :(得分:2)

这里有一些进一步的信息: the-designer-could-not-be-shown-with-platform-x64

当你试图访问设计师时,在AnyCPU中运行的分辨率是一种解决方法,对于我们的目的就足够了。

答案 6 :(得分:2)

虽然有很多对32位等的引用,但对我有用的步骤是:

  • 将所有对用户控件的引用转换为'InformationBox1 as InformationBox'成为一个完全限定的类引用,如 'MyNamespace.CommonUi.InformationBox',在所有designer.vb文件中。

    • 清洁解决方案

    • 重建解决方案。

就我而言,这是一个从VB6到VS2008的迁移项目,两个环境都是32位,并且在同一台机器上,没有涉及64位的迹象。

答案 7 :(得分:2)

只需保存您的项目,关闭它然后重新打开它。

答案 8 :(得分:1)

如果编译x64,则会发生这种情况,因为Visual Studio设计器无法加载x64程序集。 Visual Studio的设计者只能加载x86程序集,因为它只是一个32位进程!

  1. 您可以更改为AnyCPU
  2. 为x86构建,然后Visual Studio设计器能够加载程序集以在设计时显示控件
  3. 不要使用x64程序集进行设计,只能通过批处理或在Visual Studio中构建它们,然后切换回AnyCPU或x86

答案 9 :(得分:1)

我认为您应该让您在64位项目的单独项目中控制UI,并使用任何CPU设置运行它。这将有助于不用64版本清理和重建它。

答案 10 :(得分:1)

您可以更改为任何CPU

Project =&gt; properties =&gt;建立

平台目标:更改为任何CPU

清理并重建,重新打开设计文件

答案 11 :(得分:1)

最近,我在VS 2015中使用一个自定义控件(C#)遇到了相同的问题。

我通过清洁溶液(“构建”->“清洁溶液”)解决了问题,然后重新构建了整个溶液。一切恢复顺利。

我的项目设置的平台目标已经设置为“任何CPU”,并且选中了“首选32位”复选框。不知道为什么会这样。

答案 12 :(得分:1)

我有同样的问题,我通过以下方法解决了它:

  1. 转到Visual Studio中解决方案的属性。
  2. 将“平台”引导到“ AnyCPU”。
  3. 重建解决方案。
  4. 重新启动Visual Studio。