如何解决 VS2010 Windows 窗体设计器问题(无法加载基类)

Posted

技术标签:

【中文标题】如何解决 VS2010 Windows 窗体设计器问题(无法加载基类)【英文标题】:How to resolve VS2010 Windows Form Designer issue (base class could not be loaded) 【发布时间】:2011-12-07 14:37:32 【问题描述】:

我最近在使用继承的 UserControls 时,在 VS2010SP1 的 Windows 窗体设计器中遇到错误。

错误是

无法显示此文件的设计器,因为没有 可以设计其中的类。设计师检查了 文件中的以下类: DebugPanel --- 基类 无法加载“UI.Panels.PanelBase”。确保 程序集已被引用,并且所有项目都已构建。

PanelBase 是一个 UserControl,它与 DebugPanel 在同一个类库中定义,它还实现了一个接口 IPanel(它又在同一个类库中定义)。 IPanel 实现了在不同类库中定义的接口 IBaseItem。

所以我们有

DebugPanel            (Library UI.Shared2)
- PanelBase           (Library UI.Shared2)
    - UserControl     (System.Windows.Forms - .NET4)
    - IPanel          (Library UI.Shared2)
        - IBaseItem   (Library Net.Common) 

PanelBase 可以正确设计,项目全部正确构建并且可以正常工作,但是当我尝试设计任何继承的控件时,设计器会失败。这不仅限于 DebugPanel 控件,还包括从 PanelBase 继承的任何控件...我还看到了我使用的具有类似继承层次结构的其他控件的问题。

我一般可以通过清理库UI.Shared2,关闭VS再打开,重建解决方案,打开设计器来临时解决问题。 然后这将工作一段时间,然后再次开始失败。

有没有人有任何建议可以永久解决此问题而无需重新启动 VS?

编辑:我的目标是包含所有库的完整版 .NET 4。

【问题讨论】:

尝试以完整版 .NET 而不是客户端配置文件为目标。 道歉 - 我忘了补充说我的目标是 .NET4 的完整版本。最初我只针对客户资料,但我想我会试一试完整版! 我在 VS2010 中打开几个表单时遇到了类似的问题,但我把它归结为我们在基类中从 .net 1.1 开始使用的一些 3rd 方组件。我的情况非常糟糕,每次我尝试在设计器中打开它时都会显示红色错误消息,甚至拒绝保存手写代码。我们的管理层决定不续订该第 3 方的许可证(.net 4 版本)。所以我最终将这些控件包装在 .net 4.0 包装器中,然后在基本组件中使用这些控件,现在一切正常:)。不知道你有没有同样的情况。 @SSamra,这是一个有趣的建议 - 我不会想到(因为它肯定应该向后兼容!)但可能是问题的根源,因为我们确实使用以 .NET 2 为目标的第 3 方库(来自内存)。我试试看,谢谢。 【参考方案1】:

我有同样的问题。我有一个从中继承的 Form 对象/基础对象,突然之间,我看到所有从 Base 继承的 Form 的消息。

我试图回溯并找出最近发生了什么变化,并记得我将我的项目平台目标从任何 CPU 设置为 x64。我将它改回任何 CPU 并解决了问题,然后将其重新设置回 x64 仍然可以解决问题。

顺便说一句,这是在 VS 2013 上的。

【讨论】:

搞乱目标对我来说也是如此。就我而言,此修复程序适用于 VS 2015。 这也为我修复了它。出于某种原因,Windows 窗体项目设置为 x64。我将它们更改为 AnyCPU,清理并构建,它已修复。谢谢! 在 VS2015 中也是如此。我也忘记了我已经切换了。下面是一个问题的参考,解释了Form Designer需要一个编译的程序集才能显示继承的表单但是VS本身是32位进程,解决方法是使用AnyCPU。我还没有尝试过,但是不可能将基表单类移动到 AnyCPU dll 中并在 x64 中引用它吗? support.microsoft.com/en-ca/kb/967050 在 VS2015 上为我解决了。 从发布切换到调试,然后反过来,它工作。谢谢!【参考方案2】:

我最近经常遇到这个问题,并找到了一个简单快捷的解决方法,并决定分享它(适用于 VS 2012)。

当你有这样的表格时:

public partial class MyForm : MyBaseForm

而设计师未能设计MyBaseFormthe base class 'System.object' cannot be designed,我所要做的就是删除: MyBaseForm 并恢复(Backspace > Ctrl + Z)。到时候设计师就会清醒过来。

public partial class MyForm : MyBaseForm // The designer has trouble with this
public partial class MyForm              // Force an error
public partial class MyForm : MyBaseForm // Revert back, the designer should now work again

现在剩下要做的就是等待微软修复这个烦人的错误。

【讨论】:

在 VS 2013 中仍然存在错误,但这个 hack 似乎仍然有效。 我尝试按照 jmoreno 的建议将 MyBaseForm 移到一个单独的项目中,但它并没有解决问题。然而,这个简单的技巧确实做到了。 不错的尝试,但就我而言,设计师并没有恢复理智。它显示了同样的错误。 VS 2019 中仍然存在错误,梳理了我引用的几个项目并将它们设置为使用 AnyCPU 编译最终对我有用【参考方案3】:

我建议将您的基类放在一个单独的项目中。您显然知道,问题在于 VS 丢失了一些元信息,您可以通过退出和重建来找到它。如果基类位于单独的项目中,则清理/重建更有可能使其恢复到最新状态。

【讨论】:

嗯,我可能会尝试使用代码的一个分支和有限的项目子集 - 不幸的是,该组件用于大量其他项目,所以它有点像管理噩梦,以确保它们都已正确更新。虽然我不确定这应该是一个“解决方案”,但它应该可以工作! 只是一个跟进......我并没有完全遵循这个建议,但它最接近我最终的“解决方案”。我将新类(上面层次结构中的 DebugPanel)移到一个单独的项目中,到目前为止一切似乎都正常。我不高兴不得不这样做,我觉得这是表单设计器中的一个错误,但是哦,好吧...... @Anthony:哦,毫无疑问它是 VS 中的一个错误。但除了报告它,connect.microsoft.com/VisualStudio,别无他法,只能忍受它或解决它。 我可能有一个不需要移动项目的解决方案。我遇到了同样的问题,我的解决方案是 1)关闭或取消选择继承表单设计器选项卡 2)关闭 VS 3)删除 obj 文件夹 4)重新启动 VS 并重建项目。它对我有用! 六年后,这仍然是一个错误。干得好,微软。【参考方案4】:
    清理项目(不确定是否有必要) 将构建设置为发布 重建项目

如果您在调试模式下构建项目,表单设计器将不会重新构建您手动编辑的表单。

【讨论】:

这个为我修好了:在 VS 2015 中!【参考方案5】:

我还发现,当您尝试设计一个可能引用了已在使用的库的表单时,它无法设计。

我经常运行多个 Visual Studio 实例。如果我让一个 VS 实例在调试模式下运行程序,并且该程序与我试图设计的 Visual Studio 实例共享一个库,那么我会遇到这个问题。它也可以像设计者引用的 DLL 一样简单。

一旦关闭锁定这些库文件的程序,设计就会恢复正常。

【讨论】:

【参考方案6】:

我解决了这个问题,重命名了我所有的表单和用户控件,而不是再次重命名它们......

例如:

我的用户控件...

右击..,

重命名...

然后用原来的名字做同样的事情 现在一切正常...

【讨论】:

【参考方案7】:

要添加到这个可能导致此错误的广泛问题列表,似乎从泛型类型或抽象类继承可能会使设计者陷入困境。

【讨论】:

【参考方案8】:

我在 VS2015 中遇到了这个错误,尝试了清理/重建步骤,构建版本不起作用。

我将基本控件放在另一个项目中,设计师抱怨说没有构造函数。我有一个带有 2 个参数的构造函数,但没有空的。我添加了一个空的构造函数,设计器工作了。然后我用派生控件将基本控件移回其原始位置,设计器错误又回来了。

我放弃了,只是把基础控件放在了一个“VsBug”项目中,好像很开心……

【讨论】:

以上是关于如何解决 VS2010 Windows 窗体设计器问题(无法加载基类)的主要内容,如果未能解决你的问题,请参考以下文章

新手不会用vs2010求大神帮忙如何解决窗体打不开

无法使用带有 Visual Studio 2010 的 Windows 窗体恢复设计器视图窗口

vs2022窗体设计器在哪

vs2022一直显示正在加载设计器

VS2010 winform程序中的窗体文件如何查看设计

vs2010环境下,MFC如何修改窗体名字?