web-dev-qa-db-ja.com

ASP.NET MVCアプリをデバッグするときにApplication_Start()イベントが発生しないのはなぜですか?

現在、_Global.asax.cs_ファイルに次のルーチンがあります。

_public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default",                                          
        "{controller}/{action}/{id}",                       
        new { controller = "Arrangement", action = "Index", id = "" }
    );
}

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    // Debugs the routes with Phil Haacks routing debugger (link below)
    RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
_

ルーティングデバッガー ...

_F5_をヒットすると、アプリケーションが起動し、_Index.aspx_フォルダーに_~/Views/Home/_という名前のビューがない限り、再定義したにもかかわらず「View missing」エラーメッセージが表示されます。デフォルトルートを削除し、HomeControllerを削除しました。ルーティングデバッガーを取得する予定です。そうでない場合は、少なくとも_~/Views/Arrangement/Index.aspx_の要求が必要です。
RegisterRoutes(Routetable.Routes);のブレークポイントは、デバッグ時にヒットしません。

ビルド、再構築、VSの再起動、クリーニング、再構築などを試みましたが、何も機能しないようです。アプリケーションが現在のバージョンのコードを実行しないのはなぜですか?

67
Tomas Aschan

私は問題を見つけました:

このMVCアプリケーションは、より大きなソリューションの一部であり、ある時点で、x86環境用にビルドする別のプロジェクトを設定していました(x64を実行しています)。私がそれをしたとき、明らかに他のすべてのプロジェクト-後で追加されたものも-Ctrl+Shift+Bでビルドしないように設定されていたので、デバッガーがブレークポイントにヒットしなかったのだと思います。

溶液:

ソリューションビルドプロパティに移動し(ソリューションを右クリックしてプロパティを選択し、左側のメニューで[ビルド]を選択します)、リストのプロジェクト名の横にある[ビルド]チェックボックスをオンにします。

6
Tomas Aschan

私は次の答えを見つけました forums.asp.net

サーバーまたはビルトインWebサーバーとしてIIS7を使用していますか? IIS7を使用しているときに、デバッガーを起動してページを立ち上げ、デバッガーの実行中にGlobal.asax(マークアップファイル、コードビハインドではない)を変更し、ページを更新すると、Application_Startのブレークポイントが変わることに気付きましたヒット。

何が起こっているのかと思いますが、「再生」を押すと、VSはプロセスを起動し、それをアタッチしますが、アタッチするまでに開始イベントがすでに実行されています。 Global.asaxを変更すると、アプリが再起動し、デバッガーが既にアタッチされているため、ブレークポイントにヒットできます。素晴らしい解決策ではありませんが、うまくいくようです。

それが私の場合に起こっていたことです。

105
Vishal Seth

System.Diagnostics.Debugger.Break();Application_Start()に追加します。
これにより、ブレークポイントが強制されます。

この行は、happernと#ifdef debugへのブレークポイントを回避するためにコメント化する必要があります。

25
JotaBe

Application_Start()イベントを再度発生させるには、ローカルデバッグサーバーをシャットダウン/停止する必要があると思います...システムトレイで右クリックして[停止]を選択できるはずです。

18
John Rasch

問題は、最初にApplication_Start()トリガーがかかり、次にデバッガーがアタッチすることです。

そのため、目標は、Application_Start()がまだ実行中に再びトリガーされるようなことをすることです。デバッグのために、通常どおりにデバッガを実行し、web.configファイルを編集(たとえば、改行を追加)して保存します。

13
Paul Totzke

今日同じ問題にぶつかり、ローカルIISを使用していました。

これは、ページのロード方法が原因で発生すると考えています。必要なことは、Application_Startにブレークポイントを設定することだけです。アプリケーションを実行し(私の場合、ログイン画面に移動します)、web.configに移動します。編集-スペースを追加してください。そして、Application_StartのブレークポイントにヒットするBrowser.thatを更新します。

5
Dev

以下のテクニックは私のために働いた:
簡単な回避策は、デバッガーがアタッチされた後にglobal.asaxをタッチして、アプリケーションを強制的にリサイクルすることです。次に、次のリクエスト中に、Application_Startに設定したブレークポイントがヒットします。

私はこれをここで見つけました:
http://connect.Microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

4

私の場合、私は使用していました

ローカルIIS Webサーバー Webプロジェクト設定

そして、私はVisual Studio Development Serverを使用に変更し、これは機能します。

4

私の場合、問題は椅子とキーボードの間でした-mvcプロジェクトアセンブリの名前を変更した後、正しいクラスを指すようにGlobal.asaxを更新するのを忘れました。 Global.asaxの「継承」を確認します(Visual StudioでGlobal.asaxを右クリック->マークアップを表示)

<%@ Application Codebehind="Global.asax.cs" 
  Inherits="Monster.MgsMvc.Web.MvcApplication" 
  Language="C#" %>

global.asax.csのクラス/名前空間宣言に本当に一致する場合

3
Ondrej Svejdar

プロジェクト->プロパティ-> web

「ネイティブコード」を確認してください。

enter image description here

0
s.c

私はちょうどこの問題を抱えていて、ローカルからIISにIIS

0
Clarkeye

たぶん私のソリューションは誰かを助けるでしょう:

  1. デバッガーを停止します。
  2. RegisterRoutesコードを更新します(例-add\remove int i = 1;)。
  3. 再構築します。
  4. RegisterRoutesにブレークポイントを配置します。
0
Avishay