我在 global.asax
文件的 application_start()
方法中编写了一些代码。当我在 IIS
服务器上部署我的应用程序时,它不会被调用。当我在 .NET 框架中运行代码时,它是可访问的。
我已经多次尝试重新启动应用程序,但它仍然无法正常工作。
我还尝试了以下链接中的建议。
最佳答案
在尝试调试 Appplication_Start
之前,您需要了解一些事情。有——
一:代码何时执行以及为什么几乎不可能通过附加到它来调试。
应用程序启动方法在应用程序池启动并且您的网站首次启动时执行。如果您将新的交付物部署到 IIS,那么 IIS 可能会自行重启,但不能保证它会这样做。因此,部署新代码并不能保证它会重新启动池和应用程序启动的执行。您应该重新启动应用程序池以保证应用程序启动的执行。
在调试 IIS 应用程序时,Visual Studio 将自己附加到一个名为 w3wp.exe
或类似名称(我忘记了实际可执行文件名称)的进程,这是工作进程并且仅在之后可用,记住之后,您的应用程序池已启动,您的站点已启动。所以,换句话说,如果你在服务列表中看到这个,那么应用程序启动已经被执行并且附加到它不会给你调试它的机会。这是一场与时间的拔河比赛。
所以,换句话说,调试应用程序启动是不可能的,除非你非常非常快。
二、方案一——使用Dev Server
使用 Asp.net 开发服务器或 IIS Express 在 visual studio 中启动您的应用程序,然后您就可以进行调试了。但是如果你真的想在 IIS 上进行调试,那么请查看下一节
二、解决方案2——使用IIS
System.Diagnostics
中有一个库,Debugger
,它有一种在代码中调用调试器的好方法。您可以在这里阅读 - http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.break(v=vs.110).aspx
从这个开始修改你的应用程序 -
public void Application_Start(){
....... //other codes
Debugger.Break() or Debugger.Launch()
}
当该行执行时,IIS 将停止执行,并显示一个调试器选择器窗口(类似于附件) ,让你的解决方案在 vs 中打开并从列表中选择那个 vs,将能够像往常一样调试......:)
如果您使用的是 Windows 8 而调试器未启动,请阅读本文以启用它 -
三:一件很重要的事
我注意到您说过,您正在 Application_Start 中添加数据库条目。您应该记住,Application_Start 没有 HttpContext
、ViewContext
,因此您的数据库访问代码可能会因许多其他原因而失败。
关于c# - Application_start 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973106/