最近、とあるプロジェクトだけコーディング中にVisual Studioが落ちる現象に出くわしました。
コードを書いている途中に不正終了してしまうので、非常にストレスでしたがようやく原因がわかったので、解決策を書いていきます。
同じ現象で悩んでいる方のヒントになれば幸いです。
目次
スポンサーリンク
デザイン時に処理を実行させないようにしたら解決した
デザイン画面を表示する際に、継承元フォームはユーザーコントロールの処理が実行されてしまうことがあります。
対策としてデザイン中は呼び出さないコードが必要です。
/// <summary>
/// このユーザーコントロールがロードされたときのイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void UserControl_Load(object sender, EventArgs e)
{
// デザイン中は呼び出さない
if (this.DesignMode) return;
}
DesignModeで捕捉できないケース
継承元フォームやユーザコントロール等のコンストラクタでは、DesignMode
は常にFalseになります。また、入れ子になったユーザーコントロールのDesignModeも常にFalseになります。
AppDomain.CurrentDomain.FriendlyName
は、画面デザイン時に”DefaultDomain”をビルド実行時にはアセンブリファイル名を返すため、一見するとコンストラクタ内でもデザイン時か否かを判断できそうです。しかし、C#2005でClickOnceでの配布による実行時に”DefaultDomain”を返しました。FriendlyName
を正確に把握しないでDesignMode
の代用にするのは非常に危険です。
コメント