无法在global.asax / Application_Start中断

时间:2012-05-30 13:10:11

标签: c# asp.net-mvc-3 visual-studio-2010 visual-studio-debugging

我在Application_Start()的第一行有一个断点,但Visual Studio不会破坏它。

Visual Studio已将自己附加到IIS工作进程:

  

自动连接到机器'SRD00510'上的'[2092] w3wp.exe'成功。

家庭控制器中的断点确实有效。

更新

我试过了:

  • iisreset
  • 重新启动visual studio
  • 重新启动。
  • 尝试重新安装aspnet(aspnet_regiis -i

9 个答案:

答案 0 :(得分:52)

阅读您的问题,我假设您使用IIS进行调试,而不是使用Visual Studio Development Server。

在这种情况下,调试应用程序启动很棘手,因为它仅在应用程序池启动或回收时调用一次。当Visual Studio附加到进程时,Application_Start已经在运行。

诀窍是让应用程序池回收而不会杀死你所附带的进程。

执行以下操作:

  1. 在Visual Studio中(必须以管理员身份运行)设置断点 global.asax.cs并像往常一样开始调试(F5)。该页面将打开 你的网络浏览器,但断点没有被击中。
  2. 现在的诀窍:使用文本编辑器,从哪里打开web.config 由IIS提供服务,更改它(例如在某处输入一个空白行)和 保存。与在IIS中回收应用程序池相比,这一点 让应用程序池回收(从而运行 下次访问网站时,在global.asax.cs中运行Application_Start 在没有杀死你所附属的过程的情况下被召唤。
  3. 在您的网络浏览器中,重新加载页面。现在应该打破断点!
  4. 这对我有用(IIS 7.5,VS2015)。

答案 1 :(得分:14)

将此行放在Application_Start()。

Debugger.Break();

这将显示一个对话框,允许您选择调试器。您可能需要重新启动应用程序池。

答案 2 :(得分:6)

应用程序启动时,

Application_Start()仅运行一次。重启应用程序的一些事情是:

  • web.config更改
  • 回收工作进程 - 您可以在IIS管理器中执行此操作,也可以在命令行运行iisreset

答案 3 :(得分:2)

我的解决方案是切换到使用'Visual Studio Development Server'来处理应用程序类(Global.asax)问题。完成后,我切换回IIS。

答案 4 :(得分:0)

我假设您通过单击Visual Studio中的“调试”按钮来加载应用程序?这就是我正在做的事情(在VS 2012中)并且看到了类似的问题。第一次按下该按钮启动应用程序并正确点击断点。但似乎在我停止调试后,应用程序本身仍在继续。因此,未来的调试尝试只会附加到现有流程 “停止调试”按钮旁边有一个“重启”按钮,所以我假设点击它至少会改变一些事情。 调试应用程序没有显示在IIS管理器中,所以我不能在那里停止它。同样,iisreset也没有抓住它。

到目前为止,我唯一想到的是更改一行代码,从而迫使visual studio触发构建,然后它会杀死现有的proc并重新开始。如果我只是想多次穿过那里,那会很烦人。

我不认为这是一个合适的“答案”,但它可能是一个有用的解决方法,直到有人真正得到答案。

答案 5 :(得分:0)

我之前通过这样做解决了这个问题:

  1. 在我的解决方案上运行clean(右键单击解决方案节点并单击clean)
  2. 关闭解决方案
  3. 文件 - >退出视觉工作室
  4. 如果您有多个visual studio实例正在运行,则退出所有实例。确保“任务管理器
  5. 中的进程中未列出”devenv.exe“
  6. 删除用户选项文件(.suo),通常与解决方案(.sln)文件位于同一目录中
  7. 回收IIS工作进程或使用开发服务器,终止该进程
  8. 现在打开你的解决方案并试一试。 (保持双手交叉:))

答案 6 :(得分:0)

无论何时第一次运行应用程序,或者说启动应用程序,都会有一个ASP.Net开发服务器 - 端口[端口号]启动,

Application_Start()在申请过程中运行一次。

如果要达到断点,则必须停止ASP.Net开发服务器端口并再次运行应用程序。

答案 7 :(得分:0)

如果[2092] w3wp.exe是您所做的服务,请尝试以下操作: 停止服务 - >重建服务项目 - >开始重建服务 - >尝试调试

答案 8 :(得分:0)

如@David Perlman所述,如果不使用IISEXPRESS,我将选择Logger。 Log4Net或NLog都不错。从长远来看,最好在生产环境中使用记录器。

namespace DataService
{
    using NLog;
    public class Global : System.Web.HttpApplication
    {
        private Logger log; 
        protected void Application_Start(object sender, EventArgs e)
        {
            LogManager.LoadConfiguration("nlog.config");
            log = LogManager.GetCurrentClassLogger(); 
            log.Error($"Read this line in the log specified in nlog.config");
        }