- 締切済み
Visual C# 2008 EE デザインビューエラー
Visual C# 2008 EE デザインビューエラー お世話になっております。 ASP ではないのですが、C# に関する件のため、こちらに投稿させていただきました。 【環境】 Visual C# 2008 Express Edition .NET Framework 3.5 【現象】 コントロールをデザインビューで開いた際に、Visual C# がエラーで強制終了してしまう。 ※参照:添付ファイル「visualC#_error.jpg」 【詳細】 BasePage.cs → public partial class BasePage : UserControl IndexPage.cs → public partial class IndexPage : BasePage このように、UserControl を継承した BasePage クラスと、そのクラスを継承した IndexPage クラスが存在します。 このような関係で、IndexPage クラスをデザインビューで開いた際に、強制終了してしまいます。 IndexPage.cs のコードの表示を行ったり、BasePage クラスをデザインビューで開いた際には、強制終了せずに正常に動作します。 プロジェクト作成当初は、IndexPage クラスを開いても問題なくデザインビューが見れていました。いつごろからかこのような状態になってしまいました。 IndexPage クラスだけでなく、その他 BasePage クラスを継承しているクラスをデザインビューで確認すると強制終了してしまいます。 なにか心当たりのある方がいらっしゃいましたら、 ご教示よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- magicalpass
- ベストアンサー率58% (378/648)
> Windows のエラーダイアログには「system.typeinitialization」が表示されておりました。 これはクラスの初期化時に発生する例外なので、デザインビューで出てるということはクラス定義の中にデザインビューが解釈できない記述があると考えられます。 デザインビューの構文解析はどうもコンパイラに比べると性能が劣ってるようで、コンパイラが正常に通るコードでもエラーで開けなくなってしまうことがあるようです。 > 実際は別クラスで > public readonly static int XXXXX = ・・・ > と一旦定数定義したものを参照しています。 この定義をデザインビューが認識できてないという可能性が高そうなのですが。定義を用いずに直に記述した場合はどうでしょうか?
- magicalpass
- ベストアンサー率58% (378/648)
IndexPage.csの中に複数のクラス定義があったりはしませんか? ユーザーコントロールは使ったことが無いのでわかりませんが、Form1.csなんかでForm1以外のクラスを定義してたりするとエラーでFormデザイナが開かなくなってしまいます。それと同じような状況かと。
お礼
ご回答ありがとうございます。 添付画像に問題があったので削除してしまいましたが、 一度削除すると、再アップロードできないようで、、、 ご回答の件、IndexPage.cs には 1 クラスしか定義しておりませんでした。 こちら、一度最初から基底クラス(BasePage)を作成しなおしつつ、 現状の BasePage クラスのどこが悪いかを 1 つ 1 つ確認いたしました。 そうすることで原因となる 1 行を特定することができました。 以下のような処理です。 protected void manipulationTimer_Tick(object sender, EventArgs e) { ・・・ int x = int.Parse(ConfigurationManager.AppSettings["XXXXX"]); ・・・ } manipulationTimer_Tick メソッドは、timer イベントとして BasePage クラスに定義しております。 このメソッド内で、App.config 内から定数を取得している箇所があることで、 今回のような現象が起きるようです。 (IndexPage をデザインビューで開いた際に、基底クラスである BasePage の manipulationTimer_Tick がチェックされ Visual C# 自体が落ちてしまう??) 添付画像には載せていたのですが、 Windows のエラーダイアログには「system.typeinitialization」が表示されておりました。 Timer イベントの内部で、App.config からの値を設定することは可能でしょうか? アプリケーション自体はこのソースコードで正常に動作するため、Visual C# 自体の動作なのでしょうが、、、
補足
int.Parse(ConfigurationManager.AppSettings["XXXXX"]); の部分は、毎回 timer イベントで読み込むのは無駄なので、 実際は別クラスで public readonly static int XXXXX = ・・・ と一旦定数定義したものを参照しています。
お礼
ご回答ありがとうございます。 現在試せる状況にないため、月曜日に再度試してみたいと思います。
補足
ご回答の件、直接以下のように定数を用いず記述してみましたが やはり子クラスをデザインビューで開いた際に強制終了してしまいました。 int x = int.Parse(ConfigurationManager.AppSettings["XXXXX"]); 開発中はコメント化しておくなどで対応しようかなと考えていますが、、、