16

Global.asaxのApplication_Start中にデータベースの初期化を実行するASP.Netアプリケーションがあります。IISExpressを使用してアプリケーションをデバッグしています。

デバッグを停止してデータベースをクリアしてから再起動すると、Application_Startコードが呼び出されず、データベースが適切に初期化されないため、アプリケーションが失敗することがわかりました。これは、デバッグが停止した後もIISExpressインスタンスがまだ実行されているためです。Visual Studioを再起動するのではなく、既存のプロセスに接続しているように見えます。

新しいデバッグセッションを開始すると、IIS Expressのアプリケーションプロセスが常に再起動する(または通常のIISのアプリケーションプールがリセットされる)ように、この動作を変更する方法はありますか?

または、デバッグセッションの終了時にIIS Expressを強制的にシャットダウンする方法はありますか?

プロジェクト設定のWebダイアログから[編集して続行を有効にする]をオンにすると、デバッグの終了時にIISExpressが停止するという副作用があることがわかりました。ただし、IIS Expressを停止するためだけに、[編集して続行]の副作用を紹介したいのかわかりません。確かにもっと良い方法がありますか?

重要かどうかはわかりませんが、これはVS2012です。

4

2 に答える 2

19

残念ながら、構成では実現できません。私はあなたに別のトリックを提案するかもしれませんが、それがあなたのものよりも優れているかどうかを決めるのはあなた次第です:)

web.configファイルのタイムスタンプを変更するビルド後のイベントを作成できます。http://www.stevemiller.net/apps/のtouch.exeツールを使用しました。また、「ビルド後のイベントを実行する」を「常に」に設定する必要があります。したがって、「ビルドイベント」構成は次のようになります。

ここに画像の説明を入力してください

デバッガーを起動するたびにこのオプションを設定すると、web.configタイムスタンプが更新され、最初のリクエストでアプリケーションの再起動(アプリケーションアプリドメインの再読み込み)が発生します。ただし、この時点で既にこのプロセスに接続されているため、Application_イベントブレークポイントが機能するはずです。

于 2012-09-26T15:21:57.910 に答える
6

Powershellワンライナーを使用して、外部アプリに依存しないようにすることができます。

powershell -NoProfile -Command (Get-Item "<path>\Web.config").lastwritetime=(Get-Date)

オリジナルのインスピレーションはここから来ています...

于 2014-09-16T19:30:10.967 に答える