2012-03-28 10 views
2

Visual Studio 2010とC#ASP.NETを使用しています。私がF5キーを使用してプロジェクトを実行すると、ASP.NET開発サーバーが起動します。これはIISではなく私の仕事で使用しているサーバーです。ASP.NETサーバーエラーの行番号がありません

問題は、「サーバーエラー/アプリケーション」で処理されない例外エラーが発生した場合、エラーページに行番号もソースファイル名もありません。単なるエラーの説明とスタックトレース。例:

Server Error in '/' Application. 
DataField must be specified. [or whatever error message] 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.InvalidOperationException: DataField must be specified. 
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 
Stack Trace: 
[etc] 

私はデバッグモードでコンパイルしています。私のPDBはプロジェクトのBINディレクトリに生成されています。私のプロジェクトのプロパティでは、Webでは、NTLM認証はオフになっています。ビルドの下で、デバッグ構成がアクティブで、DEBUGとは、一定のチェックボックスがオンになっているTRACE、私のプロジェクトのプロパティでも

<authentication mode="Forms"> 
[...] 
<customErrors mode="Off"/> 
[...] 
<compilation debug="true" targetFramework="4.0">. 

:私のweb.configファイルで、私は次のよう持っています。 [詳細設定]で、内部コンパイラのエラー報告がTrueに設定され、デバッグ情報がFullに設定されます。

私が実行しているユーザーアカウントには、グループのセキュリティポリシーで「プログラムのデバッグ」権限が有効になっています。

私はここでスタックオーバーフローや他の場所でこの質問を調べましたが、自分の状況に合ったまっすぐな答えが見つからないようです。私が見つけた1つの答えは、明らかにIISに適用されるweb.configから "impersonate = true"という設定を削除することでしたが、私はIISを使用していません。私は、IISの代わりにVS 2010に付属のビルトインASP.NET開発サーバーを使用しています。別の答えはシンボルサーバを設定し、_NT_SYMBOL_PATH環境変数を設定すると言っていますが、これが私の行っていることに当てはまるかどうかはわかりません。

これは本当に混乱しています。なぜなら、私はすべての設定と設定をデフォルトにしているからです。ほとんどの開発者が遭遇する共通の問題であるようです。他の誰もが公開を使用してIISを介して開発を行っている場合を除きます。ちなみに私はまだ行番号を取得するためにIISで試していません。しかし、私は組み込みのASP.NET開発サーバーを使用したいと思います。デフォルトでは例外の完全なデバッグ/トレースの詳細を表示し、VS 2010と統合して例外を破棄してコードをステップ実行させることもできます。しかし、多分私はあまりにも多くを求めています。誰でも?

(あなたが示唆した溶液と答える場合は、私はすでに設定あなたが示唆している持っているかどうかを確認することができますので、まず、上記の私の設定の詳細をお読みください。)

フォロー:私はIISで試してみました私は行番号を取得します。しかし、軽量の開発サーバーを代わりに使用したいので、これで問題は解決しません。

答えて

2

したがって、.CSPソースファイルで例外が発生したときに行番号が正常に表示されていたが、.ASPXソースファイルで例外が発生したときには表示されないことがわかった。 .ASPX自体については、IISまたはDevelopment Serverのいずれであっても、行番号とソースコードの抜粋はまったく表示されませんでした。 (これは私の質問にもともと問題が書かれていたのとまったく同じではないので、これは少しわかります)私の同僚の一人は、これはちょうど正常な動作だと言いました。彼はあなたのASPXページで例外がどの行にあるかを推測しなければならないことを暗示しました。

しかし、より多くの研究の後、私は方法を見つけた! .ASPXファイルで例外が発生したときに行番号を取得できます。しかし、なぜこれがセットアップするのが簡単ではないのか分かりません!追加するコードブロックを要求する代わりに、ページやプロジェクトレベルのオプションと同じように。

次のコードは、各ページのASPXに存在する必要があります。CS自体、のマスターページ、、ページクラスから派生した親クラス(ページが継承する可能性のあるもの)。これは、他のクラスのPage_Errorハンドラが代わりに呼び出され、呼び出しスタックが影響を受け、最新のエントリがエラーに関係しないためです。 (私はこれもコールスタックを横断することで解決策を検討していましたが、時間がなくなり、今はあきらめました)

public void Page_Error(object sender, EventArgs e) 
{ 
Exception objErr = Server.GetLastError().GetBaseException(); 

StackTrace st = new StackTrace(new StackFrame(true)); 
StackFrame sf = st.GetFrame(0); 
Response.Write("File Name: " + sf.GetFileName().ToString() + "<br>"); 
Response.Write("Method Name: " + sf.GetMethod().Name.ToString() + "<br>"); 
Response.Write("Error Line Number: " + (sf.GetFileLineNumber() - 1) + "<br>"); // line numbers are offset by 1 for some reason 
Response.Write("Error Column Number: " + sf.GetFileColumnNumber().ToString() + "<br>"); 

Server.ClearError(); 
} 
+0

その他の注記: Visual Studio 2010では例外が発生し、コードをステップ実行できますが、.ASPXソースファイルではなく.CSソースファイルでのみ発生します。 –

関連する問題