28

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

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

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

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

更新

我试过了:

  • iisreset
  • 重新启动视觉工作室
  • 重新启动。
  • 尝试重新安装 aspnet ( aspnet_regiis -i)
4

9 回答 9

58

阅读您的问题,我假设您使用 IIS 进行调试,而不是 Visual Studio 开发服务器。

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

诀窍是让应用程序池在不终止您所附加的进程的情况下循环使用。

请执行下列操作:

  1. 在 Visual Studio(必须以管理员身份运行)中,在 global.asax.cs 中设置断点并照常开始调试 (F5)。该页面在您的 Web 浏览器中打开,但未命中断点。
  2. 现在的诀窍:使用文本编辑器,从 IIS 提供服务的位置打开 web.config,更改它(例如在某处输入一个空行)并保存它。与在 IIS 中回收应用程序池相比,这允许应用程序池回收(并因此在下次调用网站时通过 global.asax.cs 中的 Application_Start 运行)而不会终止您所附加的进程。
  3. 在您的网络浏览器中,重新加载页面。断点现在应该被击中!

这对我有用(IIS 7.5,VS2015)。

于 2014-10-01T08:50:50.597 回答
14

将此行放在 Application_Start() 中。

Debugger.Break();

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

于 2012-05-30T13:20:37.043 回答
6

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

  • web.config 更改
  • 回收工作进程 - 您可以在 IIS 管理器中或通过iisreset在命令行运行来执行此操作。
于 2012-05-30T13:13:09.993 回答
2

我的解决方案是切换到使用“Visual Studio 开发服务器”来处理应用程序类(Global.asax)问题。完成后,我切换回 IIS。

于 2013-09-09T06:19:14.253 回答
0

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

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

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

于 2012-09-10T14:15:11.990 回答
0

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

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

现在打开您的解决方案并试一试。(保持你的手指交叉:))

于 2013-09-09T06:26:46.110 回答
0

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

Application_Start()在应用程序过程中运行一次。

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

于 2014-04-08T05:27:53.680 回答
0

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

于 2014-10-01T09:16:13.200 回答
0

如果使用 IISEXPRESS 不是一种选择,正如@David Perlman 提到的那样,我会选择 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");
        }
于 2020-03-30T17:47:31.503 回答