关于asp.net:Visual Studio可以在新的调试会话上重新启动IIS Express吗?

Can Visual Studio restart IIS Express on new debugging session?

我有一个ASP.Net应用程序,该应用程序在Global.asax的Application_Start期间执行一些数据库初始化。我正在使用IIS Express调试应用程序。

我发现,如果我停止调试,清除数据库并再次重新启动,则不会调用Application_Start代码,并且我的数据库未正确初始化,因此我的应用程序失败。这是因为调试停止后,IIS Express实例仍在运行。 Visual Studio似乎是在附加到现有进程,而不是重新启动它。

是否可以更改此行为,以使启动新的调试会话始终在IIS Express中重新启动应用程序进程(或在常规IIS中重置应用程序池)?

或者,是否有一种方法可以在调试会话结束时强制IIS Express关闭?

我确实发现,如果我在项目设置的Web对话框中选中"启用编辑并继续",则具有调试结束时停止IIS Express的副作用。但是我不确定我是否仅出于停止IIS Express的目的而介绍Edit and Continue的副作用。当然有更好的方法吗?

不确定是否重要,但这是VS2012。


不幸的是,无法通过配置来实现。我可能会建议您另一个技巧,但是要由您来决定它是否比您更好:)

您可以创建一个构建后事件,该事件将更改web.config文件的时间戳。我使用了来自http://www.stevemiller.net/apps/的touch.exe工具。您还需要将"运行构建后事件"设置为"始终"。因此,您的"构建事件"配置可能如下所示:

enter image description here

在您每次启动调试器时都设置了此选项,web.config时间戳将得到更新,从而导致在第一个请求上重新启动应用程序(重新加载应用程序appdomain)-但此时您已经附加到此过程中,因此您的Application_事件断点应该起作用。


您可以使用Powershell单行程序来避免依赖外部应用程序:

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

原始灵感来自这里...