为什么我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将帮助某人:
- 停止debugging器。
- 更新
RegisterRoutes
代码(例如 – add \ removeint i = 1;
)。 - 重build。
- 在
RegisterRoutes
放置一个断点。
我刚刚遇到了这个问题,并在项目属性 – > web中将其从本地IIS交换到IIS Express,以便对其进行sorting
项目 – >财产 – >networking
选中“原生代码”。