Windows フォーム デザイナーでフォームを読み込むときに「タイプが見つかりませんでした」エラーが発生する
-
08-06-2019 - |
質問
.NET 2.0 Windows フォーム アプリを使用しています。 ListView
コントロール。
をサブクラス化しました ListView
クラスをテンプレート化する SortableListView<T>
クラスなので、表示方法やソート方法についてもう少し賢くすることができます。
残念ながら、これにより、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<Image> listViewImages;
そして、でインスタンス化されます InitializeComponent
次のような方法:
this.listViewImages = new MyApp.Controls.SortableListView<Image>();
前述したように、プログラムは完全にコンパイルされて実行されます。 SortableListView
クラスを別のアセンブリに出力して、別個にコンパイルできるようにしますが、これには違いはありません。
ここからどこへ行けばいいのか分かりません。助けていただければ幸いです。
解決 3
リストビューを追加したとき、それをツールボックスに追加してからフォームに追加しましたか?
いいえ、編集したばかりです Main.Designer.cs
そしてそれをから変更しました System.Windows.Forms.ListView
に MyApp.Controls.SortableListView<Image>
それはジェネリック医薬品のせいではないかと疑って、実際に解決策を見つけることにしました。
SortableListView を作成する必要があるクラスごとに、次のような「スタブ クラス」を定義しました。
class ImagesListView : SortableListView<Image> { }
それから作ったのは、 Main.Designer.cs
ファイルは、 SortableListView
.
これでうまくいきました。万歳!
ありがたいことに、すべてのタイプが事前にわかっており、 SortableListView
重複コードを減らす方法として。
他のヒント
x86 / x64 アーキテクチャのせいでそれが起こりました。
Visual Studio (開発ツール自体) には x64 バージョンがないため、x64 コントロールを GUI デザイナーに読み込むことはできません。
これに対する最善のアプローチは、x86 で GUI を調整し、必要に応じて x64 用にコンパイルすることです。
私は過去に、同じプロジェクト内にあるにもかかわらず、コントロールがフォームとは異なる名前空間にあるというこのような問題(同じではありません)を経験しました。それを修正するには、を追加する必要がありました
using My.Other.Namespace;
デザイナーが生成したコード ファイルの先頭に追加します。厄介なのは、デザイナーがページを再生成するときに、ページが吹き飛ばされ続けることでした。
*.Designer.cs ファイル内の大規模な SVN 変更 (競合を伴う) のマージに関連して、私もこの問題を抱えていました。解決策は、デザイン ビューをグラフィカルに開き、コントロールを編集し (左に移動してから右に移動)、デザインを再保存するだけです。*.Designer.cs ファイルは魔法のように変更され、次のコンパイル時には警告が消えました。
明確にするために、最初にコードのマージの問題をすべて修正する必要があります。これは、VS にそれらを強制的にリロードさせるための単なる回避策です。
MyApp.Controls.SortableListView を含むアセンブリが GAC にインストールされていませんね。
リストビューを追加したとき、それをツールボックスに追加してからフォームに追加しましたか?
おそらく次のことを追加するのを忘れているかもしれません。
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Release all resources used.
/// </summary>
/// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
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
// ...
}
私も同様のものを持っていました - ユーザーコントロールがリモートサービスを参照していました(設計時に利用できるかどうかは保証できませんでした)。
MSDN のこの投稿 追加することを提案しました
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-File の独自のコントロールの一部を削除した後、問題は解決されました。元のコードに戻っても問題は解決されました。したがって、Visual Sudio のキャッシュに問題があるようです。現時点ではこの問題を再現できません。
問題が発生した場合は、フォルダーを空にしてみてください
C:\Users\あなたの名前\AppData\Local\Microsoft\VisualStudio\VERSION\Designer\ShadowCache
うまくいきましたか?
私の場合、問題はプロジェクトのフォルダー名でした。私がこう思う理由:私は SVN を使用しており、「trunk\SGIMovel」内で完全に動作します。しかし、「OS#125\SGIMovel」という名前のブランチ フォルダーでは、カスタム コントロールを使用し、トランク フォルダーで動作するフォームのデザイナーを開くことができません。
# を外すだけでうまくいきます。
何もなくてありがとう。