web-dev-qa-db-ja.com

global.asax / Application_Startに割り込むことはできません

Application_Start()の最初の行にブレークポイントがありますが、VisualStudioはブレークポイントになりません。

Visual Studioは、IIS作業プロセス:

マシン「SRD00510」のプロセス「[2092] w3wp.exe」への自動接続に成功しました。

ホームコントローラーのブレークポイントは機能します。

更新

私はもう試した:

  • iisreset
  • visualStudioを再起動しました
  • 再起動しました。
  • Aspnetを再インストールしようとしました(aspnet_regiis -i
27
jgauffin

あなたの質問を読んで、私はあなたがVisual Studio Development Serverではなく、デバッグにIISを使用していると思います。

この場合、アプリケーションプールの開始時またはリサイクル時に一度だけ呼び出されるため、アプリケーション開始のデバッグには注意が必要です。 Visual Studioがプロセスにアタッチされているとき、Application_Startは既に実行されています。

秘訣は、接続しているプロセスを強制終了せずにアプリケーションプールをリサイクルすることです。

以下をせよ:

  1. Visual Studio(管理者として実行する必要があります)で、global.asax.csにブレークポイントを設定し、通常どおりデバッグを開始します(F5)。ページはWebブラウザーで開きますが、ブレークポイントに到達しません。
  2. ここでの秘訣:テキストエディターを使用して、IISが提供する場所からweb.configを開き、変更して(たとえば、どこかに空白行を入力して)保存します。 IISでアプリケーションプールをリサイクルするのとは対照的に、これにより、接続しているプロセスを強制終了することなく、アプリケーションプールをリサイクルできます(したがって、次にWebサイトが呼び出されたときにglobal.asax.csのApplication_Startを介して実行されます)。
  3. Webブラウザーで、ページをリロードします。ブレークポイントに到達する必要があります。

それは私にとってはうまくいきます(IIS 7.5、VS2015)。

52
Jochen

この行をApplication_Start()に配置します。

Debugger.Break();

これにより、デバッガーを選択できるダイアログが表示されます。アプリケーションプールを再起動する必要がある場合があります。

14
Vince Panuccio

私の解決策は、「Visual Studio Development Server」を使用して、アプリケーションクラス(Global.asax)の問題に対処するように切り替えることです。完了したら、IISに切り替えます。

2
David Perlman

Visual Studioの[デバッグ]ボタンをクリックしてアプリケーションをロードしていると思いますか?それが私が(VS 2012で)行っていることであり、同様の問題が発生しています。初めてそのボタンを押すと、アプリケーションが起動し、ブレークポイントに正しくヒットします。しかし、デバッグを停止した後も、アプリケーション自体は続行しているようです。したがって、将来のデバッグの試みは、既存のプロセスにアタッチするだけです。
「デバッグの停止」ボタンの横に「再開」ボタンがあるので、少なくともクリックすると状況が変わると思います。デバッグアプリはIIS managerに表示されないので、そこで停止することはできません。同様に、iisresetもそれをキャッチしません。

これまで私が理解したのは、コードの行を変更することだけです。これにより、Visual Studioにビルドをトリガーさせ、既存のprocを強制終了して最初からやり直します。そこを何度も歩きたいだけなら、ちょっと面倒です。

これは適切な「回答」とは思いませんが、誰かが実際の回答を得るまでは、これは役立つ回避策になる可能性があります。

0
Mike Ruhlin

[2092] w3wp.exeが作成したサービスである場合は、次のことを試してください:サービスの停止->サービスプロジェクトの再構築->再構築されたサービスの開始->デバッグを試みる

0

初めてアプリケーションを実行するとき、またはアプリケーションを起動すると言うときはいつでも、ASP.Net開発サーバーがあります-起動するポート[ポート番号]、

Application_Start()は、アプリケーションの実行中に1回実行されます。

ブレークポイントに到達したい場合は、ASP.Net開発サーバーポートを停止して、アプリケーションを再実行する必要があります。

0
Ravi Sankar Rao

私はこれを行うことによって以前にこの問題を回避しました:

  1. ソリューションでクリーンを実行します(ソリューションノードを右クリックして[クリーン]をクリックします)
  2. 解決策を閉じる
  3. ファイル-> VisualStudioで終了
  4. Visual Studioの複数のインスタンスを実行している場合は、すべてのインスタンスを終了します。 「devenv.exe」がタスクマネージャーのプロセスにリストされていないことを確認します
  5. 通常はソリューション(.sln)ファイルと同じディレクトリにあるユーザーオプションファイル(.suo)を削除します
  6. リサイクルIISワーカープロセス、または開発サーバーを使用している場合は、そのプロセスを強制終了します

次に、ソリューションを開いて試してみてください。 (指を交差させてください:))

0

@David Perlmanが述べているように、IISEXPRESSを使用するオプションがない場合は、ロガーを使用します。 Log4NetまたはNLogはどちらも優れています。長期的には、たとえば実稼働環境でロガーを使用することをお勧めします。

namespace DataService
{
    using NLog;
    public class Global : System.Web.HttpApplication
    {
        private Logger log; 
        protected void Application_Start(object sender, EventArgs e)
        {
            LogManager.LoadConfiguration("nlog.config");
            log = LogManager.GetCurrentClassLogger(); 
            log.Error($"Read this line in the log specified in nlog.config");
        }
0
Tomas Hesse