C# Can';t进入global.asax/Application\u启动

C# Can';t进入global.asax/Application\u启动,c#,asp.net-mvc-3,visual-studio-2010,visual-studio-debugging,C#,Asp.net Mvc 3,Visual Studio 2010,Visual Studio Debugging,我在应用程序\u Start()的第一行有一个断点,但Visual Studio不会在它上面中断 Visual Studio已将自身连接到IIS工作进程: 自动附加到计算机“SRD00510”上的进程“[2092]w3wp.exe”成功 主控制器中的断点可以正常工作 更新 我试过: iisreset 重新启动visual studio 重新启动 试图重新安装aspnet(aspnet\u regais-i) 应用程序启动()仅在应用程序启动时运行一次。重新启动应用程序的几件事是: web.c

我在
应用程序\u Start()
的第一行有一个断点,但Visual Studio不会在它上面中断

Visual Studio已将自身连接到IIS工作进程:

自动附加到计算机“SRD00510”上的进程“[2092]w3wp.exe”成功

主控制器中的断点可以正常工作

更新

我试过:

  • iisreset
  • 重新启动visual studio
  • 重新启动
  • 试图重新安装aspnet(
    aspnet\u regais-i
应用程序启动()
仅在应用程序启动时运行一次。重新启动应用程序的几件事是:

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

将此行放入应用程序\u Start()


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

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

到目前为止,我唯一知道的事情是更改一行代码,从而迫使VisualStudio触发一个构建,然后它终止现有的进程并重新开始。如果我只想在那里多走几次,那就有点烦人了


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

< P>我的解决方案是切换到使用“VisualStudio Development Server”来处理应用程序类(Global,Asax)问题。完成后,我切换回IIS。

我以前通过以下操作解决了此问题:

  • 对我的解决方案运行清理(右键单击解决方案节点,然后单击清理)
  • 封闭溶液
  • 文件->在visual studio上退出
  • 如果有多个visual studio实例正在运行,请退出所有实例。确保任务管理器中的进程中未列出“devenv.exe”
  • 删除用户选项文件(.suo),通常与解决方案(.sln)文件位于同一目录中
  • 回收IIS工作进程,或者如果使用开发服务器,请终止该进程

  • 现在打开您的解决方案并试一试。(祝你好运:)

    每当你第一次运行一个应用程序,或者说启动一个应用程序,就会有一个ASP.Net开发服务器端口[端口号]启动

    应用程序\u Start()
    在应用程序运行过程中运行一次


    如果要达到断点,必须停止ASP.Net Development Server端口并再次运行应用程序。

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

    在这种情况下,调试应用程序启动是很棘手的,因为只有在启动或回收应用程序池时才会调用它一次。当VisualStudio附加到进程时,应用程序_Start已在运行

    诀窍是使应用程序池循环使用,而不会终止所连接的进程

    请执行以下操作:

  • 在Visual Studio中(必须以管理员身份运行)在中设置断点 global.asax.cs并像往常一样开始调试(F5)。页面将在中打开 您的web浏览器,但未命中断点
  • 现在的诀窍是:使用文本编辑器,从它所在的位置打开web.config 由IIS提供服务,更改它(例如,在某处输入空行)并 保存它。与在IIS中回收应用程序池不同,这 让应用程序池循环使用(从而运行) 下次访问网站时,应用程序将在global.asax.cs中启动 调用)而不会终止所连接的进程
  • 在web浏览器中,重新加载页面。现在应该命中断点了
    这对我适用(IIS 7.5,VS2015)。

    如果[2092]w3wp.exe是您提供的服务,请尝试以下操作:
    停止服务->重建服务项目->启动重建服务->尝试调试

    如果使用IISEXPRESS不是一个选项,正如@David Perlman提到的,我会选择一个记录器。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");
            }
    

    我用任务管理器杀死了w3wp,并试图更改web.config。这很奇怪。。。如果您已连接,则更改web.config即可。您确定正在执行断点处的代码吗?你能把它移到
    应用程序的开始吗\u start()
    ?这会给我一个新的visual studio实例。通常,你会得到一个“选择器”表单来选择一个新的VS或当前正在运行的VS。你看不到吗?是的,但我只能选择一个新的visual studio实例。在某些情况下,它会列出当前正在运行的visual studio实例,并允许您选择该实例,而在其他情况下,您需要启动新实例。无论哪种方式,都可以使用此方法进行调试。如果要使用已打开的Visual Studio实例,请不要在该实例中使用“启动调试”。相反,使用浏览器来调用你的应用程序。然后,您应该能够使用现有实例。尝试右键单击proj。调试>进入新实例。通过这种方式,你可以从一开始就看到发生了什么。在第2步和第3步之间稍加修改后,这种方法仍然有效。更改web.config会强制您停止调试,但您可以重新连接到p
    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");
            }