Global.asax.cs
代码文件中。在Application_Start
,Session_Start
和Application_BeginRequest
中,我设置了一些断点。但是,这些断点从未被命中过。我在本地机器上使用VS8工作。
以下是我尝试过的:
- 停止ASP Dev服务器
- 删除所有ASP.NET临时文件
- 创建新的
Global.asax
- 关闭VS并重新打开
- 清理和重建项目
尝试了这些之后,断点仍然不会命中。
为什么会出现这种情况,有任何想法吗?
Global.asax.cs
代码文件中。在Application_Start
,Session_Start
和Application_BeginRequest
中,我设置了一些断点。但是,这些断点从未被命中过。我在本地机器上使用VS8工作。
以下是我尝试过的:
Global.asax
尝试了这些之后,断点仍然不会命中。
为什么会出现这种情况,有任何想法吗?
我也遇到了同样的问题。我猜测你是在使用本地IIS而不是VS开发服务器。如果是这样,由于调试器附加时,Global.asax.cs文件中的代码已经在IIS中执行,因此您将无法调试/步进此代码。但是,如果您使用Dev服务器,则可以访问此代码,因为调试器已经附加。
因此,请在项目属性中更改服务器以使用Visual Studio开发服务器。
在Visual Studio中右键单击您的项目 > 项目属性
> Web选项卡
> 使用Visual Studio开发服务器
。
Application_Start()
方法中添加:System.Diagnostics.Debugger.Break();
。这导致断点无法被触发。Visual Studio > 项目属性 > Web
如另一篇答案所述,Global.asax代码将在调试器附加之前运行。为了解决这个问题,您可以先开始进行调试,然后进入IIS并停止/启动应用程序,这样调试器就能够重新启动。
如果你不想使用Visual Studio开发服务器,而是使用IIS,你可以按照以下步骤操作(已在VS2015专业版中测试):
1)应用程序池保持运行状态 - 确保所使用的应用程序池正在运行,方法是访问您的Web应用程序中的页面(它可能由于空闲超时而停止)。
2)附加到进程 - Ctrl-Alt-P
或 调试->附加到进程
- > 查找与您的应用程序相对应的w3wp进程。
使用ReAttach扩展可以大大加快附加到进程的速度,该扩展会创建到最近附加进程的快捷方式。
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)