Application_Start不开火?

我有一个ASP.NET MVC(testing版)应用程序,我正在工作,并无法弄清楚,如果我做错了什么,或者如果我在Global.asax.cs中的Application_Start方法实际上是不会触发,当我尝试debugging应用程序。

我在我的Application_Start方法的一行放置了一个断点,并期望当我试图debugging应用程序断点应该被打…但它永远不会。 不是在我重新启动IIS之后,不是在我重新启动后,没有。 我错过了什么吗? 为什么这个方法永远不会被调用?

如果这是在IIS中,应用程序可以在debugging器连接之前启动。 如果是这样,我不知道你是否可以睡眠足够长的时间来连接。

在Visual Studio中,可以将debugging器附加到进程。 你可以通过点击Debug >> Attach来处理。 附加到浏览器,然后打你的应用程序。 为了安全起见,请重新启动IIS并打开该网站。 我不是100%相信这将解决问题,但它会比在App_Start中发射一个线程睡眠好得多。

另一个选项暂时驻留在内置的Web服务器上,直到完成debugging应用程序的启动。

注意: 使用内置的“Visual Studio开发服务器”IIS Express (例如,因为您正在针对IIS开发,并具有您的应用程序正常运行所需的特定设置),一个简单的替代方法就是保持运行在IIS(I使用自定义Web服务器+主机文件条目+ IIS绑定到相同的域)

  1. 等待debugging会话启动好了
  2. 然后只需要将空白编辑到根web.config并保存该文件
  3. 刷新你的页面(Ctrl + F5)

你的断点应该很好地打,你可以继续在你自然的IIS栖息地进行debugging。 太好了!

无论如何,无论你使用的是IIS,Cassini还是其他types,以下都有帮助:

  1. 在Application_Start中设置断点
  2. 开始debugging(断点最有可能是没有命中) – >在浏览器中显示一个页面
  3. 更改web.config(例如input一个空白行)并保存
  4. 在浏览器中重新加载页面 – >断点被击中!

为什么这个工作? 当web.config发生变化时,Web服务器(IIS,Cassini等)会执行一个回收操作,但在这种情况下(无论出于何种原因),这个过程保持不变,所以用debugging器(Visual Studio )。

我也有与IIS托pipe的应用程序的application_start断点问题。 一个很好的解决方法是使用Debugger.Break(); 在代码而不是VS的断点

我也有同样的问题。 我在我的解决scheme中做了很多重命名。 之后,我得到了两个不工作的networking应用程序,另外几个networking应用程序都是正确的。 我得到错误,我有错误的路线。 当我尝试在Application_Start方法中设置断点,然后重新启动IIS时,VS没有中断执行。 随着可行的networking应用程序中断正在工作。 然后我记得“clean solution”和“rebuild”不会删除重命名后留下的程序集。 这是解决scheme! 我已经手动清理我的马车应用程序的bin目录,然后在Global.asax看到新的错误Inherits=""属性被引用旧的DLL。 我已经改变了新的开始工作。 假设,在重命名Global.asax没有更新,并采取旧的程序集(错误的路线)启动应用程序。

尝试将应用程序池的pipe理pipe道模式切换为“经典”而不是“集成”。 这解决了我的问题。 现在查看原因

(这个答案的道具属于弗洛雷斯(参见他对自己的答案的评论),我只是想提供这个作为一个单独的答案,以引起更多的关注)

确保你的global.asax不在子目录下。 它必须放在你的项目的根目录。

在另一个供应商build立它后,我们接pipe了一个项目也出现了同样的问题。 问题是,虽然在Global.asax.cs中有一些由前面的供应商编写的命令,可能会导致您认为它在使用中,但实际上却被完全忽略了。 Global.asax不是从它inheritance的,如果.cs文件存在,很容易看不到这个文件 – 你必须右键单击Global.asax然后单击View Markup才能看到它。

Global.asax中:

 <%@ Application Language="C#" %> 

需要更改为:

 <%@ Application Codebehind="Global.asax.cs" Inherits="ProjectNamespace.MvcApplication" Language="C#" %> 

其中ProjectNamespace是您的Global.asax.cs类的任何名称空间(通常是您的项目的名称)。

在我们的例子中,该文件包含了一堆内联代码,其中一些是从.cs文件复制粘贴的,有些则不是。 我们只是将内联代码转储到.cs文件中,然后逐渐合并我们的更改。

当你说“debugging”时,你的意思是从Visual Studio内置的Web服务器上debugging应用程序,还是你的意思是附加到IIS中的进程? 如果是前者,则应该打到Application_Start,但是如果是后者,可能很难早日抓住它。

我们有一个类似的问题,其中global.asax.cs被忽略。

事实certificate,该网站已从预编译的.NET 2网站升级到.NET 4.0网站。 在服务器上, PrecompiledApp.config文件尚未从根文件夹中删除。 删除它之后,回收IIS应用程序池并触摸web.config重新启动应用程序,Global.asax.cs中的代码开始正常工作。

我已经根据Visual Studio的“编译代码分析”做了一些修改。 代码分析在Global.asax中为Application_Start()build议“CA1822标记成员为静态”。 我做到了,结果出现了这个问题。

我build议禁止这个代码分析消息,并且不要改变用于引导应用程序的平台自动创build的方法/类的签名。 由于某种原因,Application_Start方法的签名可能是非静态的。

我恢复到这个方法签名和Application_Start()再次触发:

  protected void Application_Start() { ... } 

一旦Global.asax和Global.asax.cs实际上没有被部署脚本复制到IIS文件夹中,我就遇到了一个问题…所以它在开发服务器上debugging时工作,而不是在IIS下。

我认为应用程序启动事件只会在第一个请求被触发时被触发,你是否打你的网站(即提出请求)?

我在一个.net 4 web窗体vs2010项目中遇到了这个问题,并尝试了在这个页面上提到的一切。 结束删除和添加global.asax实际上解决了我的问题。

我讨厌同样的问题,无法赶上Application_Start。 原因是它不是在标记文件中发生错误。 标记文件Global.asax正在inheritance另一个类…

closuresVisual Studio并删除Web项目(或解决scheme中的所有项目)中的binobj文件夹。

以下是从您的所有项目中删除这些文件夹的命令:

 rm *\bin -r rm *\obj -r 

你检查了项目设置吗? 我有这个问题,我有起始的URL到不同的端口比我的服务器特定的端口。 我花了太多时间才弄清楚…

在尝试了许多适用于我的情况并且没有任何运气的其他答案之后,我进入了Web项目(使用RIA服务的Silverlight应用程序的服务器端项目)的属性,单击“Web”选项卡并将所选服务器从“本地IIS”更改为“IIS Express”。 (注意我正在使用VS2013。)这解决了这个问题。 Application_Start在“IIS Express”下执行,但不在“本地IIS”下执行。 有趣…

迟到…

为了在debugging器有足够的时间来附加之前testingIIS应用程序是否启动,只需将其添加到GLOBAL.ASAX的Application_Start的顶部或底部。

 throw new ApplicationException("Yup, it fired"); 

我试图从Application Start中调用RegisterRoutes()中的代码,而不是击中我的断点。 我确定Application_Start没有被调用。 我不得不做一个改变,对App_start / RouteConfig.cs做一个表面的修改,并在Application_Start被调用之前保存它。 我猜这些文件被caching在某处,除非做出更改,否则不会被调用。

当使用静态页面(如index.html)作为启动页面时,我遇到了这个问题 – Application-Start没有被调用。 我发现,提供静态页面并不会真正启动应用程序。 请求一个.aspx页面。

确保Global.asax和Global.asax.cs中的名称空间是相同的。 如果它们不同,它不会抛出任何错误,但也不会触发断点,因为它根本不执行application_start。

如果您正在使用System.Diagnostics.Debugger.Break(); 解决方法(我认为这对于临时使用来说很好),而且它在Windows 8计算机上“无法正常工作”。 原因是Visual Studio的“即时debugging”中的一个错误。

解决方法如下:修复“Visual Studio Just-In-Time Debugger”

打开registry编辑器并转到HKEY_CLASSES_ROOT \ AppID {E62A7A31-6025-408E-87F6-81AEB0DC9347}获取“Ap​​pIDFlags”registry值,将该标志设置为0x8

更多信息在这里: http : //connect.microsoft.com/VisualStudio/feedback/details/770786/just-in-time-debugging-operation-attempted-is-not-supported

在我的情况下,通过系统托盘杀死内置的ASP.NET开发服务器实例解决了这个问题。

奇怪和疯狂的东西…但在服务器机器上debugging,另一个用户离开IIS Express运行在他们的会话。 我不得不注销该用户来终止他正在运行的IIS Express进程。 这似乎已经解决了这个问题!

更新

花了超过1小时追逐是什么原因造成的问题…这里的交易:我有点设法在Web.config<appSettings>部分inputs 。 Visual Studio试图警告我在Error List窗口中发出警告 。 我承认我很less检查警告…应该从现在开始检查它。 :D只要我删除了有问题的断点,在Application_Start就已经命中了。

在这里输入图像说明

尝试初始化log4net时遇到此问题。 我决定只为Global.asax创build一个静态构造函数

 static Global(){ //Do your initialization here statically } 

当您尝试将Global.asax文件重新放置到另一个解决scheme目录时,主要发生问题。 再次将Global.asax文件重新放置到默认位置。 它将按预期工作。