16

我有一个 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。

4

2 回答 2

19

不幸的是,这不能通过配置来实现。我可能会向您提出另一个技巧,但由您决定它是否比您的更好:)

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

在此处输入图像描述

在您启动调试器的任何时候设置此选项后,web.config 时间戳会在第一次请求时更新,从而导致应用程序重新启动(应用程序应用程序域重新加载) - 但此时您已经附加到此进程,因此您的Application_事件断点应该可以工作。

于 2012-09-26T15:21:57.910 回答
6

您可以使用 Powershell one-liner 来避免依赖外部应用程序:

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

最初的灵感来自这里...

于 2014-09-16T19:30:10.967 回答