在Windows窗体设计器中加载表单时出现“找不到类型”错误

我有一个.NET 2.0 Windows窗体应用程序,它大量使用ListView控件。

我已经将ListView类子类化为模板化的SortableListView类,因此它可以更明智地显示它如何显示事物并对其进行排序。

不幸的是,这似乎打破了VS2005和2008中的Visual Studio Forms Designer。

程序编译并运行正常,但是当我尝试在设计器中查看拥有的表单时,我得到这些错误:

  • 找不到类型’MyApp.Controls.SortableListView’。 请确保引用包含此类型的程序集。 如果此类型是开发项目的一部分,请确保已成功构建项目。

没有可用于此错误的堆栈跟踪或错误行信息

  • 变量’listViewImages’要么未声明,要么从未分配过。

在MyApp.Main.Designer.cs行:XYZ列:1

 Call stack: at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement) 

有问题的代码行是它实际添加到表单的位置,而且是

 this.imagesTab.Controls.Add( this.listViewImages ); 

listViewImages声明为

 private MyApp.Controls.SortableListView listViewImages; 

并在InitializeComponent方法中实例化,如下所示:

 this.listViewImages = new MyApp.Controls.SortableListView(); 

如前所述,程序编译和运行完美,我已经尝试将SortableListView类转换为单独的程序集,因此可以单独编译,但这没有区别。

我不知道从哪里开始。 任何帮助,将不胜感激!

它发生在我身上,因为x86 / x64架构。

由于Visual Studio(开发工具本身)没有x64版本,因此无法将x64控件加载到GUI设计器中。

最好的方法可能是在x86下调整GUI,并在必要时为x64编译。

我曾经遇到过这样的问题(不一样)过去我的控件在我的表单的不同命名空间中,即使它在同一个项目中也是如此。 为了解决它,我不得不添加一个

 using My.Other.Namespace; 

到设计器顶部的生成代码文件。 令人烦恼的是,当设计师重新生成页面时,它一直被吹走。

当您添加listview时,是否将其添加到工具箱中,然后将其添加到表单中?

不,我刚编辑了Main.Designer.cs并将其从System.Windows.Forms.ListView更改为MyApp.Controls.SortableListView

怀疑它可能是由于generics使我真正找到了解决方案。

对于我需要为其创建SortableListView的每个类,我定义了一个像这样的“存根类”

 class ImagesListView : SortableListView { } 

然后使Main.Designer.cs文件引用这些存根类而不是SortableListView

它现在有效,万岁!

值得庆幸的是,我能够做到这一点,因为我的所有类型都是SortableListView知道的,而我只使用SortableListView作为减少重复代码的方法。

我也有这个问题,与在* .Designer.cs文件中合并大量SVN更改(与冲突)有关。 解决方案是以图形方式打开设计视图,编辑控件(向左移动然后向右移动)并重新设计。 * .Designer.cs文件神奇地改变了,下一次编译时警告就消失了。

需要说明的是,您需要先修复所有代码合并问题。 这只是迫使VS重新加载它们的工作。

包含MyApp.Controls.SortableListView的程序集是否在GAC中没有安装任何机会呢?

当您添加listview时,是否将其添加到工具箱中,然后将其添加到表单中?

也许你忘了添加:

  ///  /// Required designer variable. ///  private System.ComponentModel.IContainer components = null; ///  /// Release all resources used. ///  /// true if managed resources should be removed otherwise; false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } private void InitializeComponent() { // ... this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use // ... } 

我有类似的东西 – 用户控件指的是远程serice(我无法保证在设计时可用)。

MSDN上的这篇post建议我添加

 if (this.DesignMode) return; 

到控件的Load函数,或者在我的情况下到WCF客户端初始化之前的那一点。 这就是诀窍。

所以

 private readonly Client _client = new Client(); 

 private Client _client; public new void Load() { if(DesignMode) return; _client = new Client(); } 

我遇到过同样的问题。 在我的情况下,这个问题是由于资源初始化。 我将以下代码从InitializeComponent方法移动到ctor(调用InitializeComponent )。 之后,此问题得到解决:

 this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid)); 

我曾经也有过一样的问题。 删除我自己的* .Designer.cs文件控件之后问题就解决了。 回到原始代码后,问题仍然解决了。 所以它似乎是Visual Sudio缓存的一个问题。 目前我无法重现这个问题。

如果您遇到问题,请尝试使用该文件夹

C:\ Users \用户YOURNAME \应用程序数据\本地\微软\ VisualStudio的\ VERSION \设计\ ShadowCache

它有用吗?

在我的情况下,问题是我的项目的文件夹的名称! 为什么我这么想:我使用SVN并在’trunk \ SGIMovel’中完美运行。 但是在名为“OS#125 \ SGIMovel”的分支文件夹中,我无法打开设计器以获取使用自定义控件并在trunk文件夹中工作的表单。

刚下车#并且工作得很好。

谢谢你。