仕事でVisual Studio 2019 Communityを使う時があるのですが、ある時、前日まで普通に使えていたプロジェクトのうち、フォームのデザイナがエラーを起こしてしまいました。
---
こんなメッセージが。
結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。
よく見ると「参照」フォルダ内のDLLに警告アイコンがついていたりします。
また、Designerファイル内の定義した箇所が警告されます。
これはDLLを戻すなり新たに参照し直すなりすれば解決します。
→私の場合は.NET Framework標準のSystem.Windows.Forms内のコントロールだけで構成されたフォームもダメでした。
こちらに書いてあるのですが、Visual Studioは32bitで動作するため、x64でビルドされたアセンブリ内にあるフォームを継承することは出来ないようです。
アセンブリをx86かAny CPUでビルドし直すしかないとのこと。
Formのコードファイル(<フォーム名>.vbとか<フォーム名>.csとか)では
Public Class <フォーム名>
と宣言して各種処理を書いていくわけですが、これより先に別のClassの定義を書くとダメとのことです。
これは知りませんでした。
→私の場合は、カスタムフォームは使っていないしFormのファイルに別Classを定義していないので、これもハズレ。
こちらの「例3」を参考にしました。
---
→これもダメでした。そもそも前日までデザイナーの表示はできていた(編集はしていない)のです。
次に試したのはこれ。
---
→ダメでした・・・が。
どうせbinやobjもダメなら他のも消してしまえ!
というわけで、以下のようにやってみました。
---
1. packages.configがプロジェクトと同じフォルダにあることを確認
2. [ツール]→[NuGetパッケージマネージャー]→[パッケージ マネージャー設定]で、「見つからないパッケージのダウンロードをNuGetに許可」となっていることを確認
3. すべてのフォームを閉じる
4. VisualStudioを閉じる(この時すべてのフォームを閉じておくこと)
5. "bin"、"obj"のほか、".vs"、"packages" フォルダを削除
6. VisualStudioを開く
7. リビルドする
---
→これで表示されるようになりました。
.vsを消したのでソリューションまわりで再設定をしなきゃいけないものが出てくる場合もありますが、デザイナーが使えないと話にならないプロジェクトもありますからね。
自分用のメモも兼ねていますが、参考になればと思います。
---
データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。---
このファイルのデザイナーに、デザインできるクラスがないため、デザイナーを表示できませんでした。
こんなメッセージが。
結論から言うと直ったのですが、この現象への対処法を調べましたのでまとめます。
該当フォーム内に、参照が切れているコントロールを載せている
ユーザーコントロールを含んだDLLまたはアセンブリを参照してコントロールを載せたはいいけど、参照元のDLLをうっかり移動させてしまって読めなくなってるパターン。よく見ると「参照」フォルダ内のDLLに警告アイコンがついていたりします。
また、Designerファイル内の定義した箇所が警告されます。
これはDLLを戻すなり新たに参照し直すなりすれば解決します。
→私の場合は.NET Framework標準のSystem.Windows.Forms内のコントロールだけで構成されたフォームもダメでした。
似たような事例として、x64でビルドされたアセンブリを継承したフォームを使った
https://blogs.yahoo.co.jp/dk521123/29205330.htmlこちらに書いてあるのですが、Visual Studioは32bitで動作するため、x64でビルドされたアセンブリ内にあるフォームを継承することは出来ないようです。
アセンブリをx86かAny CPUでビルドし直すしかないとのこと。
Formのクラス定義より先に、Formファイル内に別のClassを定義している
これも上記のurlと同じ所に書いてありました。Formのコードファイル(<フォーム名>.vbとか<フォーム名>.csとか)では
Public Class <フォーム名>
と宣言して各種処理を書いていくわけですが、これより先に別のClassの定義を書くとダメとのことです。
これは知りませんでした。
→私の場合は、カスタムフォームは使っていないしFormのファイルに別Classを定義していないので、これもハズレ。
一度クリーンしてみたり色々
https://anopara.net/2014/03/10/cform%E3%81%AE%E3%83%87%E3%82%B6%E3%82%A4%E3%83%8A%E3%81%8C%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E5%90%90%E3%81%84%E3%81%9F%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6/こちらの「例3」を参考にしました。
---
一度クリーンしてからビルドしてみる---
Visual Studioを再起動してみる
Designer.csを直接編集して、怪しい行をコメントアウトしてみる
他のFormが開けるかどうか試してみる
→これもダメでした。そもそも前日までデザイナーの表示はできていた(編集はしていない)のです。
いろいろ消してみる
https://ameblo.jp/realsystems/entry-11299589753.html次に試したのはこれ。
---
1. すべてのフォームを閉じる---
2. VisualStudioを閉じる(この時すべてのフォームを閉じておくこと)
3. "bin" および "obj" フォルダを削除
4. VisualStudioを開く
5. リビルドする
→ダメでした・・・が。
どうせbinやobjもダメなら他のも消してしまえ!
というわけで、以下のようにやってみました。
---
1. packages.configがプロジェクトと同じフォルダにあることを確認
2. [ツール]→[NuGetパッケージマネージャー]→[パッケージ マネージャー設定]で、「見つからないパッケージのダウンロードをNuGetに許可」となっていることを確認
3. すべてのフォームを閉じる
4. VisualStudioを閉じる(この時すべてのフォームを閉じておくこと)
5. "bin"、"obj"のほか、".vs"、"packages" フォルダを削除
6. VisualStudioを開く
7. リビルドする
---
→これで表示されるようになりました。
.vsを消したのでソリューションまわりで再設定をしなきゃいけないものが出てくる場合もありますが、デザイナーが使えないと話にならないプロジェクトもありますからね。
自分用のメモも兼ねていますが、参考になればと思います。
コメント
64ビットのバイナリしか持ってなかったら詰んでしまいますよね、これ。
私のところはバイナリしかないということはないのですが、ちょっと心配になりますねー。どうにかならんのかな・・。
ほんと助かりました。
継承後、デザイナがゴネることは慣っこだったのですがこれは酷いですね。
ちなみにVS2017です。
Communityだから仕方がないかもしんないけど有償賞品でこれだとやばいんじゃない?
私は最近この現象に遭遇してはいないのですが、未だにこの現象が起きているんですかね・・。
.vsとpackagesを自動的に再構築させるだけなので、Visual Studio側で対処できるような内容だと思うんですけどね。
有償商品でコレだとしたら、信頼できなくなっても仕方ないと思います。
なんでこんな誰でも起きうるようなことを放置しているのかと・・