11

global.asax から未処理の例外の詳細をメールで送信しています。例外が処理されなかった aspx ファイルまたはアセンブリ ファイルのパスやファイル名を取得するにはどうすればよいですか。

この情報は、開発およびテスト中に例外のスタック トレースに表示されていました。global.asax を運用環境にデプロイすると、この情報がスタック トレースに表示されなくなりました。

Global.asax で MailMessage オブジェクトを作成しているときに、この情報を取得する方法はありますか?

ありがとう

4

2 に答える 2

12

これがASP.NETアプリケーションであり、タグがそれを示唆している場合は、次のようなことができるはずです... ctx.Request.Url.ToString()は、エラーが発生した場所のファイル名を提供します。

protected void Application_Error(object sender, EventArgs e)
{
    MailMessage msg = new MailMessage();
    HttpContext ctx = HttpContext.Current;

    msg.To.Add(new MailAddress("me@me.com"));
    msg.From = new MailAddress("from@me.com");
    msg.Subject = "My app had an issue...";
    msg.Priority = MailPriority.High;

    StringBuilder sb = new StringBuilder();
    sb.Append(ctx.Request.Url.ToString() + System.Environment.NewLine);
    sb.Append("Source:" + System.Environment.NewLine + ctx.Server.GetLastError().Source.ToString());
    sb.Append("Message:" + System.Environment.NewLine + ctx.Server.GetLastError().Message.ToString());
    sb.Append("Stack Trace:" + System.Environment.NewLine + ctx.Server.GetLastError().StackTrace.ToString());
    msg.Body = sb.ToString();

    //CONFIGURE SMTP OBJECT
    SmtpClient smtp = new SmtpClient("myhost");

    //SEND EMAIL
    smtp.Send(msg);

    //REDIRECT USER TO ERROR PAGE
    Server.Transfer("~/ErrorPage.aspx");
}
于 2009-02-26T00:24:33.163 に答える
0

Visual Studio では、デバッグ シンボルを生成するようにリリース ビルドを設定する必要があります。デバッグ ビルドとは異なり、これは既定では設定されていません。これにより、完全な例外スタック トレースが得られます。

それでも、JIT コンパイラーによって行われる最適化 (インライン化など) は、スタック トレースで正しい行番号を取得できないことを意味する場合があります。行番号を確認したい場合は、リリース ビルドを「最適化なし」に設定することもできます。ただし、これは、アプリのパフォーマンスやスループットが低いことを意味する場合があります (Web アプリでは後者がより重要になる傾向があります)。

編集: [ソリューション エクスプローラー] ウィンドウに移動し、プロジェクトを右クリックして [プロパティ] メニュー項目を選択すると、[デバッグ シンボルの生成] 設定を見つけることができます。次に、[構成プロパティ] > [ビルド] > [デバッグ情報の生成] に移動し、true または false に設定します。コードの最適化設定は同じウィンドウにあります。

于 2009-02-25T00:05:15.603 に答える