我目前在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);
}
Routing debugger ...
当我点击F5
时,应用程序会启动,除非我在Index.aspx
文件夹中有一个名为~/Views/Home/
的视图,否则会收到“查看丢失”错误消息,尽管我有重新定义了默认路由并删除了HomeController
。我希望得到路由调试器,如果没有,至少要求~/Views/Arrangement/Index.aspx
调试时,RegisterRoutes(Routetable.Routes);
上的断点永远不会被击中。
我尝试过构建,重建,重新启动VS,清理,重建等等,但似乎没有任何工作。为什么应用程序不运行当前版本的代码?
答案 0 :(得分:102)
我找到了以下答案on forums.asp.net:
您使用IIS7作为服务器还是内置Web服务器?我注意到在使用IIS7时,如果启动调试器,让一个页面出现,然后在调试器仍在运行时更改Global.asax(标记文件,而不是代码隐藏),然后刷新页面,Application_Start中的断点将是击中。
我认为正在发生的事情是按下“播放”,VS只是启动进程,然后附加到它,但是当它附加到它时,启动事件已经运行。通过更改Global.asax,您可以使应用程序重新启动,并且由于调试器已经连接,您可以访问断点。这不是一个很好的解决方案,但似乎有效。
这就是我的情况。
答案 1 :(得分:25)
将System.Diagnostics.Debugger.Break();
添加到Application_Start()
。
这将迫使断点。
这一行应该被注释掉以避免断点到happern和#ifdef debug
以确保永远不会生产。
答案 2 :(得分:18)
我相信您必须关闭/停止本地调试服务器才能再次触发Application_Start()
事件...您应该能够在系统托盘中右键单击它并选择“停止”。
答案 3 :(得分:11)
问题是先Application_Start()
触发,然后调试器附加。
因此,目标是做一些会导致Application_Start()
在其仍在运行时再次触发的事情。出于调试目的,只需像通常那样运行调试器然后编辑(例如添加换行符)并保存web.config文件。
答案 4 :(得分:6)
我发现了问题:
这个MVC应用程序是一个更大的解决方案的一部分,我曾在其中设置了另一个项目来构建x86环境(我正在运行x64)。当我这样做时,显然所有其他项目 - 甚至是后来添加的项目 - 都被设置为不在Ctrl+Shift+B
上构建,我想这就是为什么调试器没有达到我的断点。
解决方案:
进入解决方案构建属性(右键单击Solution,选择属性,然后选择左侧菜单上的Build),并选中列表中项目名称旁边的Build复选框。
答案 5 :(得分:5)
我今天遇到了同样的问题并使用了本地IIS。
我相信这是因为页面加载的方式。 您需要做的就是在Application_Start中放置一个断点。运行应用程序(在我的情况下,它进入登录屏幕),然后转到web.config。编辑它 - 添加一些空格。然后在Browser.t中刷新,这将在Application_Start上点击断点。
答案 6 :(得分:4)
在我的情况下,我使用
Web项目设置中的本地IIS Web服务器
我改为使用Visual Studio开发服务器,这样可行。
答案 7 :(得分:4)
以下技术对我有用:
简单的解决方法是在附加调试器后触摸global.asax以强制应用程序回收。然后在下一个请求期间,您在Application_Start上设置的断点将被命中。
答案 8 :(得分:3)
在我的情况下,问题出在椅子和键盘之间 - 重命名mvc项目程序集后,我忘了更新Global.asax指向正确的类。因此,请检查Global.asax中的“继承”(在visual studio中右键单击Global.asax - >查看标记)
<%@ Application Codebehind="Global.asax.cs"
Inherits="Monster.MgsMvc.Web.MvcApplication"
Language="C#" %>
如果它真的与您的Global.asax.cs类/名称空间声明匹配
答案 9 :(得分:0)
也许我的解决方案可以帮助某人:
RegisterRoutes
代码(例如 - 添加\删除int i = 1;
)。RegisterRoutes
。答案 10 :(得分:0)
我刚刚遇到此问题并在项目属性中从本地IIS交换到IIS Express - &gt;网络将其整理出来
答案 11 :(得分:0)