【问题标题】:How to debug code executed at application's startup if application is hosted in IIS and starts when IIS does?如果应用程序托管在 IIS 中并在 IIS 启动时启动,如何调试在应用程序启动时执行的代码?
【发布时间】:2017-01-19 14:05:51
【问题描述】:

我有一个 .NET 应用程序,它是服务器框架,它托管在 IIS 中,并在 IIS 启动时启动。

为了调试我通过 Visual Studio 附加到客户端进程的框架。它适用于正常调试,但现在我想在框架从 xml 文件加载其配置时调试部分(它由 C# 代码处理)。它只在应用程序启动时执行一次,与 IIS 启动的时间完全相同。附加我的解决方案时,我的速度并不比 IIS 快。

如果我将框架附加到客户端进程然后重置 IIS,调试器将被分离。

如何处理此类问题?

糟糕的解决方案:唯一可行的方法是在应用的开头放置一个很长的 Thread.Sleep 然后快速附加。

【问题讨论】:

  • “重置 IIS”是什么意思?如果只是回收应用程序池,调试器会分离吗?
  • @Crowcoder 是的。如果您转到右上角的 IIS GUI,您将看到 RESTART 按钮。
  • 这与回收应用程序池不同。
  • 我试过了,它仍然分离调试器。

标签: .net visual-studio debugging iis


【解决方案1】:

添加

System.Diagnostics.Debugger.Launch();

Application_Start。您将收到一个弹出窗口,询问您是否要调试该网站,如果您单击“确定”,您将被带到处于调试模式的 Visual Studio,并在该行暂停。

【讨论】:

    【解决方案2】:

    尝试将您的项目更改为使用“IIS Express”而不是本地 IIS - 当您启动应用程序时,Visual Studio 也会启动 IIS Express,调试器已附加到服务。

    您可以通过右键单击项目来更改设置 => 选择属性 => 单击 Web 选项卡 => 在“服务器”下的组合框中找到 IIS Express。

    【讨论】:

    • 好吧,酷,你知道我如何选择我想使用的 IIS(明天我可以使用代码和工具访问机器)但我认为这可能是一些标准技巧.此外,客户端应用程序运行在与 Framework 相同的 IIS 上。
    • 在我的原始评论中,我写了如何配置服务器以使用 IIS Express。当您这样做时,它将显示服务器的新 url(很可能是 localhost 和一个随机端口号,如下所示:localhost:1236 - 您只需将您的客户端指向此 url,它应该可以工作,假设它在同一台机器)
    • @Yoda,这个问题呢?你能从 lmms90 的建议中得到有用的信息吗?
    • @JackZhai-MSFT 不幸的是,没有,试过没有帮助。在处理较小的解决方案时,它可能是一个有效的解决方案。我只需要理解代码。
    猜你喜欢
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2011-03-07
    • 2019-06-15
    相关资源
    最近更新 更多