Form_Loadでcatchされなかった例外が無視される

次の環境でWindowsアプリケーションを作成している場合、Form_Loadでcatchされなかった例外がデバッグ時に無視される問題が発生する為注意が必要です。

  • Windows7 64bit版
  • Visual Studio 2010 (SP1も含む)

下のサンプルのように、新規プロジェクトでWindowsフォームアプリケーションを作成し Form1_Load で適当な例外を発生させます。

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            NotImplement();
        }
 
        private void NotImplement()
        {
            throw new NotImplementedException();
        }
    }
			

このコードをデバッグ実行した際に、本来であれば NotImplementedException を catch していませんので、実行が中断され、 「NotImplementedException はハンドルされませんでした。」のメッセージがでるはずです。
しかし、実際には何事もなかったのようにForm1が表示されてしまいます。

同じ環境でVisual Studio 2008を使用して実行した場合、こちらは期待通りに下のようなメッセージが表示されます。

VS2008使用時

この件に関して、下記のマイクロソフトのブログなどに説明がありますが、今のところ諦めるしかないようです。
http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/69a0b831-7782-4bd9-b910-25c85f18bceb/

ただし、このままの状態でデバッグしていると Form_Load で例外が発生していることに気が付かず、問題解決に時間がかかってしまう場合があります。
Form_Load 内でcatchすることは可能なので、私の場合は必ず Form_Load で下記の処理をしています。(不本意ですが…)

            try
            {
                // Form_Loadで必要な処理
 
            }
            catch (Exception ex)
            {
                // デバッグ時にcatchされなかった例外が無視される場合があるのでAssertする
                System.Diagnostics.Debug.Assert(false, ex.Message);
            }
			
使用環境: Visual Studio 2010 .NET Framework 4 (Windows7 64bit)

C# メニューリスト