Visual Studio 中的 Azure 上的远程调试 ASP.NET CoreRemote Debug ASP.NET Core on IIS in Azure in Visual Studio

本文内容

本指南介绍如何设置和配置 Visual Studio ASP.NET Core 应用,如何使用 Azure 将其部署到 IIS,以及如何从 Visual Studio 附加远程调试器。

在 Azure 上进行远程调试的建议方法取决于方案:

在这种情况下,你必须将应用从 Visual Studio 部署到 Azure,但不需要手动安装或配置 IIS 或远程调试器(这些组件以虚线表示),如下图所示。

远程调试器组件

  • 若要在 Azure VM 上调试 IIS,请按照本主题中的步骤进行操作(请参阅AZURE vm 上的远程调试部分)。这样,你就可以使用 IIS 的自定义配置,但设置和部署步骤会更复杂。

对于 Azure VM,必须将应用从 Visual Studio 部署到 Azure,并且还需要手动安装 IIS 角色和远程调试器,如下图所示。

远程调试器组件

警告

在完成本教程中的步骤后,请确保删除你创建的 Azure 资源。这样可以避免产生不必要的费用。

必备条件Prerequisites

若要执行本文中所述的步骤,需要安装 Visual Studio 2019。

若要执行本文中所述的步骤,需要安装 Visual Studio 2017。

网络要求Network requirements

不支持在通过代理连接的两台计算机之间进行调试。不建议在高延迟或低带宽连接(如拨号 Internet)或跨国家/地区跨 Internet 进行调试,它们可能会失败,也可能会变得很慢。有关要求的完整列表,请参阅要求

在 Visual Studio 计算机上创建 ASP.NET Core 应用程序Create the ASP.NET Core application on the Visual Studio computer

  • 创建新的 ASP.NET Core 应用程序。

在 Visual Studio 2019 中,键入Ctrl + Q打开搜索框,键入 " asp.net",选择 "模板",然后选择 "创建新的 ASP.NET Core Web 应用程序"。在出现的对话框中,将项目命名为MyASPApp,然后选择 "创建"。接下来,选择 " Web 应用程序(模型-视图-控制器) ",然后选择 "创建"。

在 Visual Studio 2017 中,选择 "文件" > 新建 > 项目",然后选择" C# Visual > Web > ASP.NET Core web 应用程序"。在 "ASP.NET Core 模板" 部分,选择 " Web 应用程序(模型-视图-控制器) "。请确保选择 "ASP.NET Core 2.1",并选择 "启用 Docker 支持",并将身份验证设置为 "无身份验证"。将项目命名为MyASPApp

  • 打开 About.cshtml.cs 文件并在 OnGet 方法中设置断点(在旧模板中,请改为打开 HomeController.cs,然后在 About() 方法中设置断点)。

Azure App Service 上的远程调试 ASP.NET CoreRemote Debug ASP.NET Core on an Azure App Service

在 Visual Studio 中,你可以快速将应用程序发布和调试到完全预配的 IIS 实例。但是,IIS 的配置是预设的,不能对其进行自定义。有关更多详细说明,请参阅使用 Visual Studio 将 ASP.NET Core web 应用部署到 Azure(如果需要自定义 IIS 的功能,请尝试在AZURE VM上进行调试。)

使用服务器资源管理器部署应用和远程调试To deploy the app and remote debug using Server Explorer

  • 在 Visual Studio 中,右键单击项目节点,然后选择 "发布"。

如果先前配置了任何发布配置文件,则“发布”窗格会显示。单击 "新建配置文件"。

  • 从 "发布" 对话框中选择 " Azure App Service ",选择 "新建",然后按照提示进行发布。

有关详细说明,请参阅使用 Visual Studio 将 ASP.NET Core Web 应用部署到 Azure

发布到 Azure 应用服务

  • 打开服务器资源管理器查看 > 服务器资源管理器),右键单击应用服务实例,然后选择 "附加调试器"。

  • 在正在运行的 ASP.NET 应用程序中,单击 "关于" 页的链接。

应在 Visual Studio 中命中断点。

就这么简单!本主题中的其余步骤适用于 Azure VM 上的远程调试。

Azure VM 上的远程调试 ASP.NET CoreRemote Debug ASP.NET Core on an Azure VM

你可以创建适用于 Windows Server 的 Azure VM,然后安装并配置 IIS 和所需的其他软件组件。这需要更多时间,而不是部署到 Azure App Service,要求您按照本教程中的剩余步骤进行操作。

这些过程已在以下服务器配置上进行了测试:

  • Windows Server 2012 R2 和 IIS 8
  • Windows Server 2016 和 IIS 10

应用已在 Azure VM 上的 IIS 中运行?App already running in IIS on the Azure VM?

本文包含有关在 Windows server 上设置 IIS 的基本配置以及通过 Visual Studio 部署应用程序的步骤。包括这些步骤以确保服务器安装了所需的组件,应用程序可以正常运行,并且已准备好进行远程调试。

  • 如果你的应用程序在 IIS 中运行,并且你只是想要下载远程调试器并开始调试,请参阅下载并在 Windows Server 上安装远程工具

  • 如果你想要帮助确保在 IIS 中正确设置、部署和运行你的应用程序以便可以进行调试,请按照本主题中的所有步骤进行操作。

    • 在开始之前,请执行安装和运行 IIS中所述的所有步骤。

    • 在网络安全组中打开端口80时,还应为远程调试器打开正确的端口(4024或4022)。这样一来,以后就不必打开它。

更新 Windows Server 上的浏览器安全设置Update browser security settings on Windows Server

如果在 Internet Explorer 中启用了增强的安全配置(默认情况下启用),则可能需要将一些域添加为受信任的站点,以便下载某些 web 服务器组件。通过转到 " Internet 选项" > 安全性 > 受信任的站点 > 站点)来添加受信任的站点。添加以下域。

  • microsoft.com
  • go.microsoft.com
  • download.microsoft.com
  • iis.net

下载软件时,你可能会收到请求,要求你授予加载各种网站脚本和资源的权限。其中一些资源不是必需的,但为了简化此过程,请在出现提示时单击 "添加"。

在 Windows Server 上安装 ASP.NET CoreInstall ASP.NET Core on Windows Server

备注

如果系统没有 Internet 连接,请先获取并安装 Microsoft Visual C++ 2015 Redistributable,再安装 .NET Core Windows Server 托管捆绑包

  • 重启系统(或在命令提示符处依次执行“net stop was /y”和“net start w3svc”,了解系统路径的更改)。

选择部署选项Choose a deployment option

如果你需要帮助来将应用程序部署到 IIS,请考虑以下选项:

  • 通过在 IIS 中创建一个发布设置文件并在 Visual Studio 中导入设置来进行部署。在某些情况下,这是部署应用程序的快速方法。当你创建发布设置文件时,会在 IIS 中自动设置权限。

  • 通过发布到本地文件夹,然后将首选方法的输出复制到 IIS 上已准备的应用文件夹进行部署。

可有可无使用发布设置文件进行部署(Optional) Deploy using a publish settings file

您可以使用此选项创建发布设置文件并将其导入到 Visual Studio 中。

备注

此部署方法使用 Web 部署。如果要在 Visual Studio 中手动配置 Web 部署而不是导入设置,则可以安装 Web 部署3.6,而不是 Web 部署3.6 来承载服务器。但是,如果你手动配置 Web 部署,你将需要确保使用正确的值和权限配置服务器上的应用文件夹(请参阅configure ASP.NET 网站)。

为 Windows Server 上的主机服务器安装和配置 Web 部署Install and configure Web Deploy for Hosting Servers on Windows Server

用于托管服务器的 Web 部署 3.6 提供额外的配置功能,可实现从 UI 创建发布设置文件。

  • 如果在 Windows 服务器上已安装 Web 部署 3.6,请使用“控制面板”“程序”“卸载程序”将其卸载。 > >

  • 接下来,在 Windows 服务器上安装用于托管服务器的 Web 部署 3.6。

要安装用于托管服务器的 Web 部署,请使用 Web 平台安装程序 (WebPI)。(要从 IIS 查找 Web 平台安装程序链接,请选择服务器管理器左侧窗格中的“IIS”。右键单击服务器并选择“Internet Information Services (IIS)管理器”。)

在 Web 平台安装程序中,在“应用程序”选项卡中查找“用于托管服务器的 Web 部署”。

  • 如果尚未安装“IIS 管理脚本和工具”,请立即安装。

转到“选择服务器角色”“Web 服务器(IIS)”“管理工具”,然后选择“IIS 管理脚本和工具”角色,点击“下一步”,然后安装角色 > > 。

安装 IIS 管理脚本和工具

需要脚本和工具来生成发布设置文件。

  • 根据需要,打开“控制面板”>“系统和安全”>“管理工具”>“服务”来验证 Web 部署是否正确运行,并确保“Web 部署代理服务”正在运行(旧版本中的服务名称不同)。

如果代理服务未运行,请启动该服务。如果服务根本不存在,请转到“控制面板”>“程序”>“卸载程序”,查找“Microsoft Web 部署 版本>”<。选择“更改”安装,并确保对 Web 部署组件选择“将安装到本地驱动器”。完成更改安装步骤。

在 Windows Server 上的 IIS 中创建发布设置文件Create the publish settings file in IIS on Windows Server

  • 关闭并重新打开 IIS 管理控制台以在 UI 中显示更新的配置选项。

  • 在 IIS 中,右键单击“默认网站”,选择“部署”“配置 Web 部署发布” > 。

配置 Web 部署配置

  • 在“配置 Web 部署发布”对话框中,检查设置。

  • 单击“设置”。

在“结果”面板中,输出显示已为指定用户授予访问权限,并且已在对话框中显示的位置生成了具有 .publishsettings 文件扩展名的文件。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <publishData>
  3. <publishProfile
  4. publishUrl="https://myhostname:8172/msdeploy.axd"
  5. msdeploySite="Default Web Site"
  6. destinationAppUrl="http://myhostname:80/"
  7. mySQLDBConnectionString=""
  8. SQLServerDBConnectionString=""
  9. profileName="Default Settings"
  10. publishMethod="MSDeploy"
  11. userName="myhostname\myusername" />
  12. </publishData>

根据 Windows Server 和 IIS 配置,可以在 XML 文件看到不同的值。下面是有关所看到的值的一些详细信息:

    • 属性中引用的 msdeploy.axd 文件是 Web 部署动态生成的 HTTP 处理程序文件*publishUrl。(用于测试目的,http://myhostname:8172 通常也适用。)
  • publishUrl 端口设置为端口 8172,这是 Web 部署的默认端口。

  • destinationAppUrl 端口设置为端口 80,这是 IIS 部署的默认端口。

  • 如果使用主机名无法在 Visual Studio 中连接到远程主机(在后续步骤中),请测试 IP 地址以代替主机名。

备注

如果要发布到在 Azure VM 上运行的 IIS,则必须在网络安全组中打开 Web 部署和 IIS 端口。有关详细信息,请参阅安装和运行 IIS

  • 将此文件复制到运行 Visual Studio 的计算机上。

在 Visual Studio 中导入发布设置并进行部署Import the publish settings in Visual Studio and deploy

  • 如果计算机上的 Visual Studio 中打开有 ASP.NET 项目,则在该计算机的解决方案资源管理器中右键单击该项目,然后选择“发布”。

  • 如果先前配置了任何发布配置文件,则“发布”窗格会显示。点击“新建配置文件”。

  • 在“选取发布目标”对话框中,点击“导入配置文件”。

选择发布

  • 导航到上一节中创建的发布设置文件的位置。

  • 在“导入发布设置文件”对话框中,导航到并选择在上一节中创建的配置文件,然后单击“打开”。

Visual Studio 开始执行部署过程,并且输出窗口将显示进度和结果。

如果出现任何部署错误,请单击“设置”以编辑设置。修改设置,然后单击“验证”以测试新设置。如果找不到主机名,请尝试“服务器”和“目标 URL”字段中的 IP 地址而不是主机名。

编辑发布工具中的设置

应用成功部署后,它应自动启动。如果应用不是从 Visual Studio 启动的,请在 IIS 中启动该应用。对于 ASP.NET Core,需要确保将 DefaultAppPool 的应用程序池字段设置为“无托管代码”。

  • 在 "设置" 对话框中,通过单击 "下一步" 启用调试,选择 "调试" 配置,然后选择 "文件发布选项" 下的 "删除目标中的其他文件"。

备注

如果选择发布配置,则在发布时 ,将在 web.config 文件中禁用调试。

  • 单击 "保存",然后重新发布应用。

可有可无通过发布到本地文件夹进行部署(Optional) Deploy by publishing to a local folder

如果要使用 PowerShell、RoboCopy 将应用复制到 IIS 或要手动复制文件,则可以使用此选项来部署应用。

在 Windows Server 计算机上配置 ASP.NET Core 网站Configure the ASP.NET Core Web site on the Windows Server computer

如果要导入发布设置,则可以跳过此部分。

  • 打开“Internet 信息服务(IIS)管理器” 并转到“站点”。

  • 右键单击“默认网站” 节点,然后选择“添加应用程序”。

  • 将 "别名" 字段设置为MyASPApp ,将 "应用程序池" 字段设置为 "无托管代码"。将物理路径设置为C:\Publish (稍后将在其中部署 ASP.NET Core 项目)。

  • 在 IIS 管理器中选择了站点后,选择 "编辑权限",并确保为应用程序池配置的 IUSR、IIS_IUSRS 或用户是具有读取 & 执行权限的授权用户。

如果看不到这些用户的访问权限,请执行以下步骤,将 IUSR 添加为具有读取 & 执行权限的用户。

可有可无通过从 Visual Studio 发布到本地文件夹来发布和部署应用(Optional) Publish and Deploy the app by publishing to a local folder from Visual Studio

如果使用的不是 Web 部署,则必须使用文件系统或其他工具发布和部署应用。首先,可以使用文件系统创建包,然后手动部署包,也可以使用 PowerShell、RoboCopy 或 XCopy 等其他工具。在本部分中,我们假设你要在未使用 Web 部署的情况下手动复制包。

  • 在中解决方案资源管理器,右键单击项目节点并选择发布(Web 窗体发布 Web 应用)。

如果先前配置了任何发布配置文件,则“发布”窗格会显示 。单击新的配置文件

  • 在中发布对话框中,选择文件夹,单击浏览,并创建一个新文件夹C:\Publish

RemoteDBG_Publish_Local

对于 Web 窗体应用中,选择自定义在发布对话框中,输入配置文件名称,然后选择确定

  • 单击创建配置文件下拉列表中 (发布是默认值)。

  • 在中发布对话框中,单击设置链接,然后再选择设置选项卡。

  • 将配置设置为调试,选择删除所有现有的文件发布前,然后单击保存

备注

如果使用发布版本,则禁用调试的 web.config 文件中,当你发布时。

  • 单击“发布” 。

RemoteDBG_Publish_Debug_Config

应用程序将发布调试到本地文件夹的项目配置。在输出窗口中显示进度。

  • 将 ASP.NET 项目目录从 Visual Studio 计算机复制到配置为 ASP.NET 应用程序的本地目录 (在此示例中, C:\Publish) Windows Server 计算机上。在本教程中,我们假定您要手动复制,但可以使用 PowerShell、 Xcopy 或 Robocopy 等其他工具。

注意

如果需要更改代码或重新生成,必须重新发布并重复此步骤。复制到远程计算机的可执行文件必须与你的本地源和符号完全匹配。如果您不这样做将收到cannot find or open the PDB file警告在 Visual Studio 中,当您尝试调试进程时。

  • 在 Windows 服务器上,验证可以正确运行应用,通过在浏览器中打开应用。

如果应用程序无法正常运行,在你的服务器和在 Visual Studio 计算机上安装 ASP.NET 的版本之间可能存在不匹配或可能使用 IIS 或网站配置存在问题。重新检查前面的步骤。

在 Windows Server 上下载和安装远程工具Download and Install the remote tools on Windows Server

下载与你的 Visual Studio 版本匹配的远程工具版本。

在远程设备或服务器,你想要调试,而非 Visual Studio 计算机,下载并安装远程工具的正确版本从下表中的链接。

  • 下载最新版本的 Visual Studio 远程工具。最新的远程工具版本兼容使用早期的 Visual Studio 版本,但早期的远程工具版本不是与更高版本的 Visual Studio 版本兼容。(例如,如果使用 Visual Studio 2017,下载适用于 Visual Studio 2017 远程工具的最新的更新。在此方案中,不要下载远程工具的 Visual Studio 2019。)
  • 下载的远程工具使用相同的体系结构在计算机安装它们。例如,如果你想要调试远程计算机运行 64 位操作系统上的 32 位应用程序,安装 64 位远程工具。
Version链接说明
Visual Studio 2019远程工具与所有 Visual Studio 2019 版本兼容。下载匹配您设备的操作系统 (x 86、 x64、 或 ARM64) 的版本。在 Windows 服务器上,请参阅取消阻止文件下载下载远程工具的帮助。
Visual Studio 2017远程工具与所有 Visual Studio 2017 版本兼容。下载匹配您设备的操作系统 (x 86、 x64、 或 ARM64) 的版本。在 Windows 服务器上,请参阅取消阻止文件下载下载远程工具的帮助。
Visual Studio 2015远程工具Visual Studio 2015 远程工具可从 My.VisualStudio.com。如果系统提示,请加入免费Visual Studio Dev Essentials程序或使用 Visual Studio 订阅 id。 登录在 Windows 服务器上,请参阅取消阻止文件下载下载远程工具的帮助。
Visual Studio 2013远程工具#installing-the-remote-tools)下载 Visual Studio 2013 文档中的页
Visual Studio 2012远程工具#installing-the-remote-tools)下载 Visual Studio 2012 文档中的页
Version链接说明
Visual Studio 2017远程工具与所有 Visual Studio 2017 版本兼容。下载匹配您设备的操作系统 (x 86、 x64、 或 ARM64) 的版本。在 Windows 服务器上,请参阅取消阻止文件下载下载远程工具的帮助。有关远程工具的最新版本,打开Visual Studio 2019 doc
Visual Studio 2015远程工具Visual Studio 2015 远程工具可从 My.VisualStudio.com。如果系统提示,请加入免费Visual Studio Dev Essentials程序或使用 Visual Studio 订阅 id。 登录在 Windows 服务器上,请参阅取消阻止文件下载下载远程工具的帮助。
Visual Studio 2013远程工具#installing-the-remote-tools)下载 Visual Studio 2013 文档中的页
Visual Studio 2012远程工具#installing-the-remote-tools)下载 Visual Studio 2012 文档中的页

复制可运行远程调试器msvsmon.exe到远程计算机,而不是安装远程工具。但是,远程调试器配置向导 (rdbgwiz.exe) 可仅当安装远程工具。您可能需要使用该向导进行配置,如果你想要远程调试器作为服务运行。有关详细信息,请参阅(可选) 配置远程调试器作为服务

备注

  • 若要调试 ARM 设备上的 Windows 10 应用,使用 ARM64,这是可用的远程工具的最新版本。
  • 若要调试在 Windows RT 设备上的 Windows 10 应用,使用 ARM,仅在 Visual Studio 2015 远程工具下载中可用。

在 Windows Server 上设置远程调试器Set up the remote debugger on Windows Server

  • 在远程计算机上查找和启动远程调试器启动菜单。

如果在远程计算机上没有管理权限,请右击远程调试器应用,然后选择以管理员身份运行。否则,只是它正常启动。

如果想要附加到正在运行以管理员身份,或不同的用户下运行的进程帐户 (如 IIS) 中,右键单击远程调试器应用,然后选择以管理员身份运行.有关详细信息,请参阅以管理员身份运行远程调试器

  • 第一次启动远程调试器 (或之前已配置),远程调试配置对话框随即出现。

远程调试器配置

  • 如果 Windows Web 服务 API 未安装,这种情况发生,仅在 Windows Server 2008 R2 上,选择安装按钮。

  • 选择你想要在使用远程工具的至少一个网络类型。如果这些计算机通过域连接,则必须选择第一项。如果这些计算机通过工作组或家庭组连接,选择相应的第二个或第三个项。

  • 选择配置远程调试,配置防火墙并启动远程调试器。

  • 配置完成后,远程调试器窗口会显示。

远程调试器窗口

远程调试器现在正在等待连接。使用服务器名称和端口号显示在 Visual Studio 中设置的远程连接配置。

若要停止远程调试器,请选择文件 > 退出您可以重新启动它从启动菜单中,或从命令行:

  1. <Remote debugger installation directory>\msvsmon.exe

备注

如果需要添加其他用户的权限、更改身份验证模式或远程调试器的端口号,请参阅配置远程调试器

从 Visual Studio 计算机附加到 ASP.NET 应用程序Attach to the ASP.NET application from the Visual Studio computer

  • 在 Visual Studio 计算机上,打开要调试的解决方案(如果按照本文中的步骤操作,请MyASPApp )。

  • 在 Visual Studio 中,单击 "调试" > "附加到进程" (Ctrl + Alt + P)。

提示

在 Visual Studio 2017 及更高版本中,可以使用 "调试" > "重新附加到进程 … " (Shift + Alt + P),重新附加到以前附加到的进程。

  • 将 "限定符" 字段设置为 <远程计算机名称 > ,然后按enter

验证 Visual Studio 是否向计算机名称添加所需的端口,该端口采用以下格式: <远程计算机名称 >:p o

在 Visual Studio 2019 上,应看到 <远程计算机名称 >: 4024

在 Visual Studio 2017 上,应看到 <远程计算机名称 >: 4022

端口是必需的。如果看不到端口号,请手动添加。

  • 单击“刷新”。“可用进程” 窗口中将显示某些进程。

如果看不到任何进程,请尝试使用 IP 地址而不是远程计算机名称(端口是必需的)。可以在命令行中使用 ipconfig 来获取 IPv4 地址。

如果要使用 "查找" 按钮,可能需要在服务器上打开 UDP 端口 3702

  • 勾选“显示所有用户的进程”。

  • 键入你的进程名称的第一个字母,以快速查找你的应用。

    • 选择dotnet (适用于 .net Core)

如果有多个显示dotnet的进程,请检查 "用户名" 列。在某些情况下,"用户名" 列会显示应用池名称,如IIS APPPOOL\DefaultAppPool。如果你看到应用程序池,则可以使用一种简单的方法来确定正确的进程:为要调试的应用程序实例创建新的命名应用程序池,然后在 "用户名" 列中轻松找到它。

  • 在某些 IIS 方案中,你可能会在进程列表中找到你的应用程序名称,例如MyASPApp。您可以改为附加到此进程。

RemoteDBG_AttachToProcess

RemoteDBG_AttachToProcess

  • 单击 “附加”

  • 打开远程计算机的网站。在浏览器中,转到 http://**remote computer name><** 。

将显示 ASP.NET 网页。

  • 在正在运行的 ASP.NET 应用程序中,单击 "关于" 页的链接。

应在 Visual Studio 中命中断点。

疑难解答Windows Server 上打开所需的端口Troubleshooting: Open required ports on Windows Server

在大多数情况下,所需的端口都是通过安装 ASP.NET 和远程调试器打开的。但是,如果您正在排查部署问题,而且该应用程序托管在防火墙后面,则您可能需要验证是否打开了正确的端口。

在 Azure VM 上,必须通过网络安全组打开端口。

所需端口:

  • 80-IIS 需要
  • 当附加到 Visual Studio 中的远程调试器时,UDP 3702-(可选)发现端口可用于 "查找" 按钮。

此外,ASP.NET 安装还应打开这些端口:

  • 8172-(可选)从 Visual Studio 部署应用时需要 Web 部署