c# - Application_start 不工作

标签 c# asp.net .net

我在 global.asax 文件的 application_start() 方法中编写了一些代码。当我在 IIS 服务器上部署我的应用程序时,它不会被调用。当我在 .NET 框架中运行代码时,它是可访问的。

我已经多次尝试重新启动应用程序,但它仍然无法正常工作。

我还尝试了以下链接中的建议。

Application_Start not firing?

最佳答案

在尝试调试 Appplication_Start 之前,您需要了解一些事情。有——

一:代码何时执行以及为什么几乎不可能通过附加到它来调试。

应用程序启动方法在应用程序池启动并且您的网站首次启动时执行。如果您将新的交付物部署到 IIS,那么 IIS 可能会自行重启,但不能保证它会这样做。因此,部署新代码并不能保证它会重新启动池和应用程序启动的执行。您应该重新启动应用程序池以保证应用程序启动的执行。

在调试 IIS 应用程序时,Visual Studio 将自己附加到一个名为 w3wp.exe 或类似名称(我忘记了实际可执行文件名称)的进程,这是工作进程并且仅在之后可用,记住之后,您的应用程序池已启动,您的站点已启动。所以,换句话说,如果你在服务列表中看到这个,那么应用程序启动已经被执行并且附加到它不会给你调试它的机会。这是一场与时间的拔河比赛。

所以,换句话说,调试应用程序启动是不可能的,除非你非常非常快。

二、方案一——使用Dev Server

使用 Asp.net 开发服务器或 IIS Express 在 vi​​sual 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 将停止执行,并显示一个调试器选择器窗口(类似于附件)enter image description here ,让你的解决方案在 vs 中打开并从列表中选择那个 vs,将能够像往常一样调试......:)

如果您使用的是 Windows 8 而调试器未启动,请阅读本文以启用它 -

http://blogs.msdn.com/b/mapo/archive/2013/11/07/debugger-launch-not-displaying-jit-debugger-selection-popup-on-windows-8-8-1.aspx

三:一件很重要的事

我注意到您说过,您正在 Application_Start 中添加数据库条目。您应该记住,Application_Start 没有 HttpContextViewContext,因此您的数据库访问代码可能会因许多其他原因而失败。

关于c# - Application_start 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973106/

相关文章:

asp.net - 无法完成操作。提供的 SqlConnection 未指定初始目录或 AttachDBFileName

c# - System.Numerics.Vector.ConditionalSelect 的用途是什么?

c# - 优化多个参数传递给类构造函数的过程

c# - 查看死锁后的堆栈跟踪

c# - Windows Phone 7、登录屏幕重定向和 .exit 的案例?

c# - 如何将 C++ SetWindowsHookEx 移植到 C# 或者这是不可能的?

asp.net - ASP.NET逻辑/连接池和错误处理

c# - Entity Framework 迁移重命名表和列

C# 编程错误 - 表达式表示 `type',其中应为 `variable'、 `value' 或 `method group'

c# - "too much"什么时候异步等待?所有方法都应该返回 Task 吗?