在Visual Studio 2012,MVC4中完成调试后终止w3wp.exe

时间:2013-11-09 01:47:24

标签: c# asp.net-mvc debugging asp.net-mvc-4 visual-studio-2012

所以我试图在MVC4中调试一个进程。我发送POST请求,看它操纵数据库等等。但是,在看到我想看到的信息后,我点击“停止调试”。在任何典型的GUI .NET应用程序中,我认为该进程将终止,但它会继续执行。如果我在文件中进行任何更改并尝试再次调试,则不会触发断点,因为文件不会从先前运行的仍在运行的进程中过时。此时我有2个选择 - 让它使用任务管理器运行或终止w3wp.exe任务以继续调试。

我试图点击调试 - >终止全部,但该过程仍继续执行。我知道这是因为我附加到进程(Debug - > Attach to Process)并且它在执行过程中在我的多个断点之一暂停。

让我们提一下,我正在使用谷歌浏览器向控制器发送POST请求,因此它可能无法终止,因为我没有使用IE - 但是,我确实认为有更好的解决方案然后使用IE浏览器。

为了解决这个问题,我必须进入Windows任务管理器并终止IIS进程(w3wp.exe),这似乎是彻头彻尾的混乱。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  

如果我对文件进行了任何更改并尝试再次调试,则不会触发断点,因为文件并未从之前运行的仍在运行的进程中过时。

修改任何代码文件后,您需要重新构建解决方案,然后再次调试 - >附加到流程。

请注意,停止调试并不意味着它总是会终止进程。它将仅使用Visual Studio杀死Visual Studio Web开发服务器或某些时候IIS Express进程。在这里你提到了w3wp.exe。虽然此过程由IIS管理。

答案 1 :(得分:0)

以更优雅的方式重新启动w3wp工作进程:

  • 在命令行中运行“iisreset”
  • 在IIS管理器控制台中,选择相应的应用程序池,然后单击“回收”

要正常关闭长时间运行的业务逻辑,请尝试global.asax中的Application_Shutdown事件。

对于不那么优雅的方法,ThreadPool可以帮助你 - 它上面的线程被标记为Background,因此当w3wp的主线程退出时,Windows不会等待它们完成。然而,这种方法并不总是有效,因为第三方库(尤其是网络)可能会创建非后台线程,这也会延迟关闭。

对于更快和最脏的,使用Environment.Exit,由一些仅调试事件触发。 http://msdn.microsoft.com/en-us/library/system.environment.exit(v=vs.110).aspx