我的C#中的ASP.NET应用程序中有一些代码位于Global.asax.cs
代码文件中。在Application_Start
,Session_Start
和Application_Begin Request
我设置了一些断点。然而,这些都没有被击中。我正在使用VS8在我的本地机器上工作。
这是我尝试过的:
Global.asax
在尝试完这些之后,断点不会被击中。
为什么会出现这种情况?
答案 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-P
或Debug -> 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/并且它有效。
它促使我创建了虚拟目录,我说是的,从那以后断点没有任何问题。