是否可以调试不是从Visual Studio中启动的ASP.NET Web应用程序?

时间:2010-08-13 15:09:52

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

从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,但是当我进入一个我知道其中有断点的页面时,当我将鼠标悬停在“空心圆”断点上时,我收到以下消息:< / p>

  

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

6 个答案:

答案 0 :(得分:5)

你需要做的是使用attach来处理和定位aspnet_wp.exe。它可能是w3wp.exe,具体取决于操作系统的风格。我以前有一个用于执行此操作的宏,但它在VS2008之后停止工作。

答案 1 :(得分:4)

我甚至无法在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网站名称,后跟您刚指定的虚拟目录的名称。网站的默认名称通常只是默认网站。例如,如果您将虚拟目录命名为 MySolution.MyProject ,则应将默认网站/ MySolution.MyProject 指定为网站/应用程序。
    • 在目的地上标记为IIS应用程序:我保持未选中状态。
    • 在目的地留下额外的文件(不要删除):我目前未选中此项。
  4. 在VS 2010中,右键单击您的Web项目,然后选择“属性”。使用以下设置:
    • 编译标签中:
      • 单击“高级编译选项...”按钮(我使用的是VB.NET;它在C#中可能略有不同)。
      • 确保“生成调试信息”设置为完整。 (还有 pdb-only 的选项,我没试过。这可能也有效。)
    • Web 标签中:
      • 服务器下,选择使用自定义Web服务器并指定新应用程序的地址;例如: http://localhost/VirtualDirectory
      • 注意:由于我最终没有使用F5调试应用程序,因此我不确定是否需要执行此步骤。
    • 打包/发布网站标签中:
      • 您应该能够使用设置仅运行此应用程序所需的文件要部署的项目...
      • 确保取消选中排除生成的调试符号
        • 注意:出于安全考虑,除非绝对必要,否则您可能不希望在生产环境中部署调试信息。
  5. 完成上述操作后,您应该已准备好部署应用程序,以便对其进行调试。以下是我用于部署和随后调试应用程序的步骤:

    1. 右键单击您的Web项目,然后单击发布
      • 确保您的设置仍然是从上面的步骤3中定义的。
      • 点击发布按钮。这将根据当前的Build Configuration自动构建应用程序,并将其发布到指定的Web主机。
    2. 继续并导航到Web应用程序中的一个页面,以确保应用程序启动。
    3. 在VS 2010中,单击 Debug 菜单,然后选择 Attach to Process 。选择正在运行的ASP.NET进程(在Windows XP中,它是 aspnet_wp.exe )并单击 Attach
    4. 您现在应该可以在代码中添加断点,当您从浏览器导航到Web应用程序中的各个页面时,这些断点将会触发。
    5. 虽然此方法效果很好,但请记住,它不仅仅附加到本地开发环境。如果另一台计算机上的另一个用户访问该Web应用程序,我相信只要您正在调试该过程,断点仍将会触发。

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

右键单击VS中的Web项目,转到启动选项并选择“使用自定义服务器”,粘贴在IIS中用于站点的本地主机地址。

点击F5,将在IIS中运行。

答案 4 :(得分:0)

我从未进行任何特殊设置,并且附加到处理小工具的效果非常好。只需附加到aspnet_wp.exe进程即可。

答案 5 :(得分:0)

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

使用&#34进行调试;附加到进程&#34;在VS:

  1. 打开VS
  2. 转到&#34;调试&#34;
  3. 并选择&#34;附加到流程&#34;
  4. *步骤2和3可以用键盘快捷键Ctrl + Alt + P

    替换
    1. 打开一个包含进程列表的窗口
    2. 寻找&#34; w3wp&#34;过程(如果没有列出&gt;请勾选复选框&#34;显示所有用户的流程&#34;
    3. *如果有多个,您可以全部选择它们(为了解正确的)打开IIS并右键单击要调试的网站&gt; &#34;管理应用程序&#34; &GT; &#34;高级设置......&#34; &GT;查找行&#34;应用程序池&#34;,在它旁边的选项卡中,写入网站正在使用的应用程序池的名称。

      1. 从列表中选择w3wp进程

      2. 点击按钮&#34;附上&#34;

      3. 项目中的

        在您要调试的代码中放置一个断点。

        如果您看到红色的断点,但内部颜色为白色enter image description here,当您将其悬停时,会显示以下消息:

          

        断点当前不会被击中。没有加载任何符号   对于这份文件。

        这意味着未加载符号=右/更新dll's未加载! 建立项目&gt;去&#34; bin&#34;文件夹并复制右dll(projectName.dll)+也复制(projectName.pdb),pdb就像这个dll的地图。

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

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