global.asax断点未命中

时间:2011-10-05 11:43:30

标签: asp.net global-asax breakpoints

我的C#中的ASP.NET应用程序中有一些代码位于Global.asax.cs代码文件中。在Application_StartSession_StartApplication_Begin Request我设置了一些断点。然而,这些都没有被击中。我正在使用VS8在我的本地机器上工作。

这是我尝试过的:

  • 停止了ASP Dev Server
  • 删除了所有ASP.NET临时文件
  • 创建了新的Global.asax
  • 关闭VS并重新打开
  • 清理并重建项目

在尝试完这些之后,断点不会被击中。

为什么会出现这种情况?

6 个答案:

答案 0 :(得分:29)

我遇到了同样的问题。我假设您使用的是本地IIS而不是VS Development Server。如果是这种情况,您将无法在Global.asax.cs文件中调试/单步执行此代码,因为在调试器附加时,此代码已在IIS中执行。但是,如果您使用Dev服务器,则可以使用此代码,因为调试器已经附加。

因此,更改项目属性中的服务器以使用Visual Studio开发服务器。

通过在Visual Studio中右键单击项目>可以找到这一点。 Project Properties> Web tab> Use Visual Studio Development Server

答案 1 :(得分:5)

帮助我的是添加:

System.Diagnostics.Debugger.Break();Application_Start()方法。

答案 2 :(得分:2)

在我正在处理的项目中,选项卡中选择了“启动外部程序”选项:

  

Visual Studio>项目属性>网络

这导致断点不被击中。

将“开始操作”更改为“当前页面”为我解决了这个问题。

答案 3 :(得分:2)

如果您不想使用Visual Studio Development Server并使用IIS,则可以执行以下操作(在VS2015 Professional中测试)

1)处于运行状态的应用程序池 - 通过从Web应用程序访问页面来确保所使用的应用程序池正在运行(由于空闲超时,它可能会停止)。

2)附加到流程 - Ctrl-Alt-PDebug -> Attach to Process - >查找与您的应用程序对应的w3wp进程。

使用ReAttach extension为最近附加的流程创建快捷方式,可以大大加快对流程的附加。

3)应用程序池回收 - 通过输入IIS并进行回收,确保应用程序池循环使用,甚至更快,通过输入web.config,进行无效更改(放一些空白)在标签之外)并保存它

4)开始调试 - 对Web应用程序中的任何页面执行请求以强制其初始化。您应该可以从Global.asax

中的任何启动方法放置和命中断点
protected void Application_Start()
void Application_BeginRequest(Object sender, EventArgs e)
protected void Session_Start(object sender, EventArgs e)

答案 4 :(得分:0)

正如另一个答案所提到的,Global.asax代码将在调试器获得附加机会之前运行。为了解决这个问题,你可以开始调试,然后进入IIS并停止/启动应用程序,这应该让调试器接受重启。

答案 5 :(得分:0)

我有两次这个问题。第一个项目发生在我身上,我去了Project Properties-> Build-> Advanced ...并从Debug Info下拉列表中选择了“full”。

第二次,我的global.asax中的断点我们没有被击中,但如果我在断点上盘旋,它会发出警告:“源代码与原始版本不同。”

我终于想通了,在这种情况下,我已经制作了这个项目的备份副本以保存代码并正在处理副本。即使它位于不同的文件夹中,它仍然使用dll作为原始虚拟目录:http://localhost:4952/

所以我在Project Properties-> Web-> Project URL中更改了它。我刚刚将端口更改为http://localhost:49523/并且它有效。

它促使我创建了虚拟目录,我说是的,从那以后断点没有任何问题。