【问题标题】:Is it possible to debug a ASP.NET Web Application that's not started from within Visual Studio?是否可以调试不是从 Visual Studio 中启动的 ASP.NET Web 应用程序?
【发布时间】:2010-08-13 15:09:52
【问题描述】:

从 Visual Studio (Casini) 中启动的默认 ASP.NET Web 服务器在我的开发机器上有点问题,所以我喜欢发布到我的开发机器上的本地 IIS 实例并查看那里的 Web 应用程序。但是,当我以这种方式启动应用程序时,我不会自动进入“调试模式”。

我知道 VS 2010 有一个“附加到进程”调试功能,但我不确定如何使用它。我需要做什么才能从 Visual Studio 中调试本地 IIS ASP.NET Web 应用程序?具体来说:

  • 我需要在 Web 应用程序的配置中更改哪些设置?
  • 我需要更改哪些“打包/发布设置”?
  • 我需要在 IIS 中进行哪些更改?
  • 在“附加到进程”屏幕中我需要做什么特别的事情吗?

背景信息:我在带有 IIS 5.1 和 .NET 4.0 的 Windows XP SP3 上运行 Visual Studio 2010。


附加信息:

我应该补充一点,我已经尝试附加到 aspnet_wp.exe,但是当我转到一个我知道其中有断点的页面时,当我将鼠标悬停在“开放圆圈”断点上时,我会收到以下消息:

当前不会命中断点。没有为此文档加载任何符号。

【问题讨论】:

  • 在 web 标签下的项目设置中是否正确设置为使用本地 IIS web 服务器?您是否也在尝试附加之前立即构建?
  • @Chris 我最初没有将项目设置为使用本地 IIS Web 服务器,但现在可以了。我确实在尝试附加之前立即进行了构建。我要再挖一些。

标签: .net asp.net debugging iis visual-studio-2010


【解决方案1】:

您需要做的是使用附加来处理和定位aspnet_wp.exe。根据操作系统的风格,它可能是 w3wp.exe。我曾经有一个宏来执行此操作,但在 VS2008 之后它停止工作。

【讨论】:

  • 感谢您的回答。我试图附加到 aspnet_wp.exe,但它似乎并没有在我的断点处停止。我已经用更多信息更新了我的问题。
【解决方案2】:

我从来没有在 Visual Studio 中使用 F5 让它工作,即使它被设置为部署到本地 IIS 服务器。我不确定到底是什么问题,但我最终能够让它以更“手动”的方式工作。让它工作的一个重要部分是确保您正在生成调试符号并将它们部署到您的网站。以下是我为最终让它发挥作用所采取的步骤:

  1. 在本地硬盘驱动器上为您的应用程序创建一个新文件夹,该文件夹将用于您的 Web 应用程序。
  2. 在 IIS 中手动创建一个指向您创建的文件夹的新虚拟目录。
    • 如果您使用的是 .NET 4.0 Web 应用程序,请确保将 IIS 中的网站属性或虚拟目录属性设置为使用 ASP.NET 4.0。
  3. 在 VS 2010 中,右键单击您的 Web 项目,然后单击“发布”。使用以下设置:
    • 发布方法:Web 部署
    • 服务网址:http://localhost
    • 站点/应用程序:IIS Web Site Name/Virtual Directory
      • 您需要指定 IIS 网站名称,后跟您刚刚指定的虚拟目录的名称。网站的默认名称通常只是 Default Web Site。例如,如果您将虚拟目录命名为 MySolution.MyProject,则将 Default Web Site/MySolution.MyProject 指定为站点/应用程序。
    • 在目标上标记为 IIS 应用程序:我未选中此项。
    • 在目标上保留额外文件(不要删除):我目前未选中此选项。
  4. 在 VS 2010 中,右键单击您的 Web 项目并选择“属性”。使用以下设置:
    • 编译选项卡中:
      • 单击“高级编译选项...”按钮(我使用的是 VB.NET;在 C# 中可能略有不同)。
      • 确保“生成调试信息”设置为完整。 (还有一个 pdb-only 选项,我没有尝试过。这可能也可以。
    • Web 选项卡中:
      • Servers 下,选择 Use Custom Web Server 并指定新应用程序的地址;例如:http://localhost/VirtualDirectory
      • 注意:由于我最终没有使用 F5 调试应用程序,因此我不确定是否需要执行此步骤。
    • 打包/发布 Web 选项卡中:
      • 您应该能够将仅运行此应用程序所需的文件设置为要部署的项目...
      • 确保未选中排除生成的调试符号
        • 注意:出于安全考虑,除非绝对必要,否则您可能不希望在生产环境中部署调试信息。

完成上述操作后,您应该准备好部署应用程序以便对其进行调试。以下是我用于部署和随后调试应用程序的步骤:

  1. 右键单击您的 Web 项目,然后单击 发布
    • 确保您的设置仍然是从上面的第 3 步定义的。
    • 点击发布按钮。这将根据当前的构建配置自动构建应用程序并将其发布到指定的网络主机。
  2. 继续并导航到 Web 应用程序中的某个页面,以确保应用程序启动。
  3. 在 VS 2010 中,单击 Debug 菜单并选择 Attach to Process。选择正在运行的 ASP.NET 进程(在 Windows XP 中,它是 aspnet_wp.exe)并单击 附加
  4. 您现在应该能够向代码中添加断点,当您从浏览器导航到 Web 应用程序中的各个页面时,这些断点就会触发。

虽然这种方法效果很好,但请记住,它不仅仅依赖于您的本地开发环境。如果另一台计算机上的其他用户要访问 Web 应用程序,我相信只要您正在调试进程,断点仍然会触发。

【讨论】:

    【解决方案3】:

    我还在本地 IIS 上开发我的 Web 应用程序。对于本地 IIS 调试,F5 一直对我有用。

    如果您必须使用附加到进程,无论出于何种原因,请确保您附加到本地进程或远程调试器正在远程计算机上运行。应用程序必须提前启动,例如,通过在浏览器中请求页面。使用 iisapp (IIS 5.1, 6.0) 或 appcmd list wp (IIS 7+) 来确定哪个进程 ID 属于哪个应用程序池(仅当您有 2 个以上的应用程序池时才需要),然后使用 @987654321 滚动@。

    【讨论】:

      【解决方案4】:

      在 VS 中右键单击您的 Web 项目,转到开始选项并选择使用自定义服务器,粘贴您在 IIS 中为您的站点提供的 localhost 地址。

      按 F5,将在 IIS 中运行。

      【讨论】:

        【解决方案5】:

        我从未做过任何特殊设置,附加到进程小工具效果很好。只需附加到 aspnet_wp.exe 进程即可。

        【讨论】:

          【解决方案6】:

          我知道你解决了你的问题,但也许它会帮助别人。

          在 VS 中使用“附加到进程”进行调试:

          1. 打开VS
          2. 转到“调试”
          3. 并选择“附加到进程”

          *步骤 2 和 3 可以替换为键盘快捷键 Ctrl+Alt+P

          1. 打开一个包含进程列表的窗口
          2. 查找“w3wp”进程(如果未列出 > 检查复选框“显示所有用户的进程”

          *如果有多个,你可以全选或者(为了知道正确的)打开IIS并右键单击要调试的网站>“管理应用程序”>“高级设置...”>查看对于“应用程序池”这一行,在它旁边的选项卡中,写有网站正在使用的应用程序池的名称。

          1. 从列表中选择 w3wp 进程

          2. 点击“附加”按钮


          在项目中,在要调试的代码中放置断点。

          如果您看到红色断点但内部颜色为白色 并且当您将其悬停时会出现以下消息:

          当前不会命中断点。未加载任何符号 用于此文档。

          这意味着未加载符号=未加载正确/更新的dll's! 构建项目>进入“bin”文件夹并复制右边的dll(projectName.dll)+同时复制(projectName.pdb),pdb就像这个dll的映射。

          将这两个文件复制到文件系统中的网站文件夹中(会有一个同名的dll-替换它,并添加pdb文件。

          然后像以前一样再次附加该过程 - 现在断点应该是全红色的,当您加载网站时,断点会命中。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-06-19
            • 1970-01-01
            • 2010-12-07
            • 2018-01-28
            • 2022-08-20
            • 1970-01-01
            • 2012-04-11
            相关资源
            最近更新 更多