2011-01-01 24 views
2

は、私は2つのプロジェクトから成るのVisual Studio 2010のソリューションがあります。参照されているプロジェクトで例外がスローされましたか?

  1. コア、機能とデータアクセスを処理C#のクラスライブラリプロジェクトを
  2. UI、ASP.NET 4のWebサイト( .NET Framework 4)を使用して、コア内の機能を呼び出します。

私の例外ハンドラは、Global.asaxの中(のApplication_Errorを。)が設定されている 例外がUIに発生した場合、すべてが完璧に動作し、私は、ファイル名、行番号など

を取得し、このケースではありませんコアで発生する例外について

{FillUserCount at offset 2376 in file:line:column <filename unknown>:0:0} 

P.S.:このため は、私は、スタックトレースなどを取得しますCore.dllとCore.pdbは、UI Binフォルダにあります。 Visual Studio - >ツール - >オプション - >デバッグ - > "自分のコードを有効にする"のチェックが外され、 "ソースサーバーのサポートを有効にする"がチェックされています。

参照プロジェクトで発生したエラーについても、スタックフレーム情報(ファイル名、クラス、メソッド、行番号)を取得する方法はありますか?

答えて

3

この作業を行うためのソリューションは、新しいWebサイトを作成し、コアプロジェクトを再参照することでした。

はまだ、ジョンスキートは述べた前提条件は同じまま:

  • プロジェクトデバッグ構成で構築する必要がある、とのプロジェクトを参照しながら
  • を離していない、PDBファイルがコピーされていることを確認し
  • コード側で、発生した例外に関する情報を取得し、StackTraceを使用する場合は、2番目のパラメータをtrueに設定してインスタンスを作成してください(ファイル名、行番号、列番号を取得する場合はtrue、 )

これは私の最終的な作業コードです。それは他人を助けるかもしれません:

 Exception ex = Server.GetLastError().GetBaseException();  

     StackTrace trace = new StackTrace(ex, true); 
     if (trace.FrameCount == 0) 
      return; 

     StackFrame stackFrame = trace.GetFrame(0); 

     string className, fileName, functionName, message; 
     int line = 0; 

     // if for some reason, filename is being retrieved as null 
     if (stackFrame.GetFileName() == null) 
     { 
      className = ex.TargetSite.ReflectedType.Name; 
      fileName = ex.TargetSite.ReflectedType.Name; 
      functionName = ex.TargetSite.Name; 
      message = ex.Message; 
     } 
     else 
     { 
      // Collect data where exception occured 
      string[] splitFile = stackFrame.GetFileName().Split('\\'); 
      className = splitFile[splitFile.Length - 1]; 
      fileName = stackFrame.GetFileName(); 
      functionName = stackFrame.GetMethod().Name; 
      message = ex.Message; 
      line = stackFrame.GetFileLineNumber(); 
     } 
2

どのようにコアを参照していますか? "Release" DLLへの参照を追加した場合、その説明は... プロジェクトへの参照を追加しただけで、 "Debug"設定のビルドを実行している場合は、大丈夫。

+0

コアはプロジェクトリファレンスで参照されます。コアとUIの両方がデバッグモードで実行されます。 質問を表示した後、全く同じ構造、1つのソリューションを2つのプロジェクトで作成しようとしました。新しく作成されたものについてはすべて問題ありません。私は両方のソリューションをプロジェクトビルドのコンフィグレーションのために並べて比較しましたが、すべてがまったく同じです。 どのように1つのソリューション(基本作成されたもの)が意図したとおりに動作し、もう1つのソリューションがファイル名、メソッド、ラインなどを表示しないのですか? 私には何かが欠けているに違いありません。 –

+0

@ダニエル:うーん...奇妙。 「デバッグモードで実行する」と言うと、デバッグ構成を構築しているということですか?それは重要なビットです。 –

+0

はい、コアとUIの両方をデバッグ構成で構築しています。これは間違っていますか? –

関連する問題