为什么我debuggingASP.NET MVC应用程序时,Application_Start()事件不会启动?

我目前在我的Global.asax.cs文件中有以下例程:

 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Arrangement", action = "Index", id = "" } ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); // Debugs the routes with Phil Haacks routing debugger (link below) RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); } 

路由debugging器 …

当我点击F5 ,应用程序启动,除非在~/Views/Home/文件夹中有一个名为Index.aspx的视图,否则我会得到“View missing”错误消息,虽然我已经重新定义了默认path并删除HomeController 。 我希望得到路由debugging器,如果不是,至less要求~/Views/Arrangement/Index.aspx
RegisterRoutes(Routetable.Routes);上的断点RegisterRoutes(Routetable.Routes); 在debugging时从来没有被击中。

我已经尝试build设,重build,重新启动VS,清理,重build等,但似乎没有任何工作。 为什么应用程序不运行当前版本的代码?

我在forums.asp.net上find了以下答案:

你使用IIS7作为服务器还是内置的Web服务器? 我注意到当使用IIS7时,如果启动debugging器,让页面出现,然后在debugging器仍在运行时更改Global.asax(标记文件,而不是代码隐藏),然后刷新页面,Application_Start中的断点将击中。

我认为发生的事情就是按下“play”,VS只是启动进程,然后附加到进程上,但是一旦启动事件就已经运行了。 通过更改Global.asax,您可以重新启动应用程序,并且由于debugging程序已经连接,您可以打断点。 不是一个很好的解决scheme,但它似乎工作。

这就是我的情况。

添加一个System.Diagnostics.Debugger.Break();Application_Start()
这将强制一个断点。

这行应该注释掉,以避免happern和#ifdef debug的断点,以确保永远不会生产。

我相信你必须closures/停止本地debugging服务器,以使Application_Start()事件再次触发…你应该可以在系统托盘中右击它并select“停止”。

我发现这个问题:

这个MVC应用程序是一个更大的解决scheme的一部分,在这个解决scheme中,我一度设置了另一个为x86环境构build的项目(我正在运行x64)。 当我这样做的时候,显然所有其他的项目,甚至是那些后来添加的项目,都被设置为不能build立在Ctrl+Shift+B ,我想这就是为什么debugging器没有达到我的断点。

解:

进入解决scheme构build属性(右键单击解决scheme,select属性,然后在左侧菜单中select生成),然后在列表中项目名称旁边的生成checkbox中进行检查。

问题是Application_Start()先触发,然后debugging器附加。

所以我们的目标是做一些可能导致Application_Start()在它仍然运行时再次触发的事情。 为了进行debugging,只需像通常那样运行debugging器然后编辑(例如添加一个换行符)并保存web.config文件。

在我的情况是我使用

Web项目设置中的本地IIS Web服务器

我更改为使用Visual Studio开发服务器 ,并且这个工作。

下面的技术为我工作:
简单的解决方法是在附加debugging器后触摸global.asax以强制应用程序回收。 然后在下一个请求期间,您在Application_Start上设置的断点将被打中。

我在这里find了这个:
http://connect.microsoft.com/VisualStudio/feedback/details/634919/cannot-debug-application-start-event-in-global-asax

在我的情况下,问题是椅子和键盘之间 – 重命名mvc项目大会后,我忘了更新Global.asax指向正确的类。 因此,检查Global.asax中的“Inherits”(在Visual Studio中,右键单击Global.asax – > View Markup)

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

如果它确实匹配你的Global.asax.cs类/名字空间声明

我今天遇到同样的问题,并使用本地IIS。

我相信这是因为页面加载的方式而产生的。 所有你需要做的是,在Application_Start中放置一个断点。 运行应用程序(在我的情况下,它花了login屏幕),然后去web.config。 编辑它 – 通过添加一些空格。 然后在Browser.that刷新Application_Start上的断点。

也许我的解决scheme将帮助某人:

  1. 停止debugging器。
  2. 更新RegisterRoutes代码(例如 – add \ remove int i = 1; )。
  3. 重build。
  4. RegisterRoutes放置一个断点。

我刚刚遇到了这个问题,并在项目属性 – > web中将其从本地IIS交换到IIS Express,以便对其进行sorting

项目 – >财产 – >networking

选中“原生代码”。

在这里输入图像说明