使用继承的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.
答案 0 :(得分:17)
我有同样的问题。我有一个继承自的Form对象/基础对象,突然间我看到所有从Base继承的Form的消息。
我试图回溯并弄清楚最近发生了什么变化,并记得我将我的项目平台目标从任何CPU设置为x64。我将其更改回任何CPU并解决了问题,然后再将其重新设置为x64仍然可以解决问题。
顺便说一下,这是在VS 2013上。
答案 1 :(得分:7)
我建议将您的基类放在一个单独的项目中。正如你明显知道的那样,问题是VS正在丢失一些元信息,你可以通过退出和重建来找到它。如果基类位于单独的项目中,则清理/重建更有可能使其更新。
答案 2 :(得分:7)
我最近一直在讨论这个问题并找到了一个简单快速的解决方法,并决定分享它(适用于VS 2012)。
如果你有这样的表格:
public partial class MyForm : MyBaseForm
并且设计师未能设计MyBaseForm
说the 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
现在剩下要做的就是等待微软修复那个烦人的bug。
答案 3 :(得分:3)
如果您在调试模式下显式构建项目,表单设计器将不会重建您手动编辑的表单。
答案 4 :(得分:1)
我还发现,当您尝试设计可能已引用已使用的库的表单时,则无法进行设计。
我经常运行几个Visual Studio实例。如果我让一个VS的实例在调试模式下运行程序,并且该程序与我试图设计的Visual Studio实例共享一个库,那么我遇到了这个问题。它也可以像设计者引用的DLL一样简单。
关闭锁定这些库文件的程序后,设计将恢复正常。
答案 5 :(得分:0)
要添加可能导致此错误的广泛问题列表,似乎从泛型类型或抽象类继承可能会使设计器失灵。
答案 6 :(得分:0)
我有VS2015的这个错误,尝试过清理/重建步骤,内置版本没有工作。
我把基础控件放在另一个项目中,设计师抱怨说它没有构造函数。我有一个带有2个参数的构造函数,但没有空的。我添加了一个空构造函数,设计师工作了。然后我使用派生控件将基本控件移回原来的位置,并且设计器错误又回来了。
我放弃了,只需将基本控件放在" VsBug"项目,似乎很开心......
答案 7 :(得分:0)