2009-05-04 8 views
3

私は.NET 3.0 VS2008でデータ移行アプリケーションの書き込みを取得しています。ドットネットアプリで行番号例外が発生しない

私はデバッグモードでデプロイして、PDB ファイルを私が実行したいサーバーにコピーしました。

例外はありますが、行番号はありません。

これは、例外の行番号がないのはなぜ私は例外

を表示する方法です?

マルコム

 string msg = string.Format("{0} {1} {2}",ex.Message,ex.StackTrace.ToString(),ex.Source.ToString());    
     if(ex.InnerException != null) 
      msg += string.Format(" {0}", ex.InnerException.ToString()); 
     return msg; 

答えて

9

あなたは行番号を取得していない場合は、どちらか

A) .NETランタイムは.PDBは外の(アセンブリと一致しないと判断しています最適化でコンパイル日付、等)

又は

B)アセンブリは、.pdbを含むディレクトリとは異なるディレクトリ(%WINDOWS%\ System32の下で実行されるWindowsサービスなど)から実行されています

最初の可能性はあなたには当てはまりませんが、これはWindowsサービスですか、または実行ディレクトリが変更されていますか?いずれにしても

、あなたがアセンブリと.PDB年代が検索されるだろう場所を決定するためにAppDomain.CurrentDomain.BaseDirectoryプロパティを使用することができるはずです(デフォルトでは、これを無効にすることができますが、それは変更されていた場合に良い指標であるべき)

+2

偉大な答え!私はあなたがすべての可能性をカバーしたと思う。 +1 – Cerebrus

1

例外文字列を混乱させないでください。探している情報を巻き戻して印刷するためにスタックを取得するために、ちょうどex.toString()を実行してください。

もちろん、pdbファイルはデバッグ情報のためにそこにいてください。 ex.toString()を呼び出すだけで、例外の書式設定は完全に不要です。