本文将指导你完成针对各种部署和调试目标的步骤。
Microsoft Visual Studio 允许你在各种 Windows 10 设备上部署和调试通用 Windows 平台(UWP)应用。 Visual Studio 将处理在目标设备上生成和注册应用的过程。
选取部署目标
若要选取目标,请转到 “开始调试 ”按钮旁边的调试目标下拉列表,然后选择要将应用部署到的目标。 选择目标后,选择“ 开始调试”(F5) 以在该目标上部署和调试,或选择 Ctrl+F5 以仅部署到该目标。
- 模拟器 会将应用部署到当前开发计算机上的模拟环境。 只有当您的应用的 目标平台最低版本 小于或等于开发计算机上的操作系统时,此选项才可用。
- 本地计算机 会将应用部署到当前开发计算机。 只有当您的应用的 目标平台最低版本 小于或等于开发计算机上的操作系统时,此选项才可用。
- 远程计算机 允许你指定用于部署应用的远程目标。 有关部署到远程计算机的详细信息,请参阅 指定远程设备。
- 设备 将应用部署到 USB 连接的设备。 设备必须解锁开发者模式,并且屏幕必须解锁。
- 模拟器 目标将启动,并根据名称指定的配置将应用部署到模拟器。 仿真器仅在运行 Windows 8.1 或更高版本的已启用 Hyper-V 计算机上可用。
调试已部署的应用
Visual Studio 还可以通过选择调试,然后附加到进程,来附加到任何正在运行的 UWP 应用进程。 连接到正在运行的进程不依赖于原始 Visual Studio 项目,但如果调试没有原始代码的进程,加载进程的符号信息 会有很大帮助。
此外,可以通过选择 调试、其他,然后 调试已安装的应用包,来附加和调试任何已安装的应用包。
选择“不启动,但在启动时调试我的代码” 将导致 Visual Studio 调试器在自定义时间启动时附加到您的 UWP 应用。 这是调试来自 不同启动方法的控制路径的有效方法,例如使用自定义参数的协议激活。
可以在 Windows 8.1 或更高版本上开发和编译 UWP 应用,但需要 Windows 10 才能运行。 如果在 Windows 8.1 电脑上开发 UWP 应用,则可以远程调试在另一个 Windows 10 设备上运行的 UWP 应用,前提是主机和目标计算机位于同一 LAN 上。 为此,请在两台计算机上下载并安装 适用于 Visual Studio 的远程工具 。 已安装的版本必须与已安装的现有 Visual Studio 版本匹配,选择的体系结构(x86,x64)也必须与目标应用的体系结构匹配。
包结构
从 Visual Studio 2015 Update 3 开始,我们为开发人员添加了为其 UWP 应用指定布局路径的选项。 这决定了在构建应用时,包布局将被复制到磁盘上的哪个位置。 默认情况下,此属性相对于项目的根目录进行设置。 如果不修改此属性,该行为将保持不变,就像以前版本的 Visual Studio 一样。
可以在项目的 “调试 ”属性中修改此属性。
如果您想在为应用创建包时将所有布局文件包含在包中,必须添加项目属性 <IncludeLayoutFilesInPackage>true</IncludeLayoutFilesInPackage>
。
若要添加此属性,请:
- 右键单击该项目,然后选择 卸载项目。
- 右键单击该项目,然后选择 “编辑[projectname].xxproj(.xxproj 将因项目语言而异)。
- 添加属性,然后重新加载项目。
指定远程设备
C# 和 Microsoft Visual Basic
若要为 C# 或 Microsoft Visual Basic 应用指定远程计算机,请在调试目标下拉列表中选择 远程计算机 。 将显示“ 远程连接 ”对话框,用于指定 IP 地址或选择发现的设备。 默认情况下,已选择 通用 身份验证模式。 若要确定要使用的身份验证模式,请参阅 身份验证模式。
若要返回到此对话框,可以打开项目属性,并转到“调试”选项卡 。在此处,选择位于“远程计算机”旁边的“查找”。
若要将应用部署到预创建者更新远程电脑,还需要在目标电脑上下载并安装 Visual Studio 远程工具。 有关完整说明,请参阅 远程电脑说明。 但是,从创意者更新起,个人电脑也支持远程部署。
C++ 和 JavaScript
若要为 C++ 或 JavaScript UWP 应用指定远程计算机目标,请执行以下作:
- 在 解决方案资源管理器中,右键单击项目,然后单击“ 属性”。
- 转到 调试 设置,在 调试器下启动,选择 远程计算机。
- 输入 计算机名称(或单击 查找),然后设置 身份验证类型 属性。
指定计算机后,可以在调试目标下拉列表中选择 远程计算机 以返回到该指定计算机。 一次只能选择一台远程计算机。
远程电脑使用指南
注释
这些说明仅适用于较旧版本的 Windows 10。 从创作者更新开始,电脑可以像对待 Xbox 一样使用。 也就是说,通过在电脑的“开发人员模式”菜单中启用“设备发现功能”,然后使用通用身份验证进行 PIN 配对并连接到电脑。
若要部署到预创建者更新远程电脑,目标电脑必须安装 Visual Studio 远程工具。 远程电脑还必须运行的 Windows 版本应大于或等于您的应用的 目标平台最低版本 属性。 安装远程工具后,必须在目标电脑上启动远程调试器。
为此,请在“开始”菜单中搜索远程调试器,将其打开,如果出现提示,则允许调试器配置防火墙设置。 默认情况下,调试器使用 Windows 身份验证启动。 如果两台电脑上的登录用户不相同,则需要用户凭据。
若要将其更改为 无身份验证,请在 远程调试器中转到 “工具 ->选项”,然后将其设置为 “无身份验证”。 设置远程调试器后,还必须确保已将主机设备设置为 开发人员模式。 之后,您可以从您的开发计算机进行部署。
有关详细信息,请参阅 Visual Studio 下载中心 页。
传递命令行调试参数
在 Visual Studio 2019 中,可以在开始调试 UWP 应用程序时传递命令行调试参数。 可以从 Application 类的 OnLaunched 方法中的 args 参数访问命令行调试参数。 若要指定命令行调试参数,请打开项目的属性,导航到“调试”选项卡。
注释
这在 Visual Studio 2017(版本 15.1)中提供,适用于 C#、VB 和 C++。 JavaScript 在更高版本中可用。 命令行调试参数可用于除模拟器之外的所有部署类型。
对于 C# 和 VB UWP 项目,您将在“开始”选项下看到一个命令行参数:字段。
对于C++和 JS UWP 项目,你将在调试属性中看到命令行参数作为字段。
指定命令行参数后,可以在 App 的 OnLaunched 方法中访问参数的值。 LaunchActivatedEventArgs 对象 args 将具有 参数 属性,该值设置为 命令行参数 字段中的文本。
身份验证模式
远程计算机部署有三种身份验证模式:
- 通用(未加密协议):在部署到远程设备时使用此身份验证模式。 目前,适用于 IoT 设备、Xbox 设备和 HoloLens 设备,以及具有 Windows 版本 1703(创意者更新)或更高版本的电脑。 通用(未加密协议)只应在受信任的网络上使用。 调试连接容易受到恶意用户的攻击,这些用户可能会截获和更改开发计算机与远程计算机之间传递的数据。
- Windows:此身份验证模式仅用于运行 Visual Studio 远程工具的远程电脑(台式机或笔记本电脑)。 当您可以访问目标计算机登录用户的凭据时,请使用这种身份验证模式。 这是用于远程部署的最安全通道。
- 无:此身份验证模式仅用于运行 Visual Studio 远程工具的远程电脑(台式机或笔记本电脑)。 在已登录测试帐户且无法输入凭据的环境中设置测试计算机时,请使用此身份验证模式。 确保远程调试器设置设置为不接受身份验证。
高级远程部署选项
自 Visual Studio 2015 Update 3 和 Windows 10 周年更新发布起,某些 Windows 10 设备有新的高级远程部署选项。 可以在项目属性的 “调试” 菜单上找到高级远程部署选项。
新属性包括:
- 部署类型
- 包注册路径
- 将所有文件保留在设备上 - 即使是不再属于布局的一部分的文件
要求
若要利用高级远程部署选项,必须满足以下要求:
- 使用 Visual Studio 2015 Update 3 或更高版本,并安装 Windows 10 Tools 1.4.1 或更高版本(包括 Windows 10 周年更新 SDK)。我们建议使用最新版本的 Visual Studio 及其更新,以确保获得所有最新的开发和安全功能。
- 目标是 Windows 10 周年更新的 Xbox 远程设备或 Windows 10 创意者更新的电脑
- 使用通用身份验证模式
属性页
对于 C# 或 Visual Basic UWP 应用,属性页将如下所示。
对于C++ UWP 应用,属性页将如下所示。
将文件复制到设备
将文件复制到设备 会以物理方式将文件通过网络传输到远程设备。 它将包布局复制并注册到构建的 Layout 文件夹路径中。 Visual Studio 会将复制到设备的文件与 Visual Studio 项目中的文件保持同步;但是,有一个选项可以 保留设备上的所有文件 - 即使是不再属于布局的一部分的文件。 选择此选项意味着以前复制到远程设备但不再是项目的一部分的任何文件都将保留在远程设备上。
将文件复制到设备 时指定的 包注册 路径是复制文件的远程设备上的物理位置。 可以将此路径指定为任何相对路径。 文件的部署位置将相对于开发文件的根目录,并且会根据目标设备而有所不同。 指定此路径对于共享同一设备的多个开发人员以及处理具有某些生成差异的包非常有用。
注释
运行 Windows 10 周年更新的 Xbox 和运行 Windows 10 创意者更新的电脑当前支持将文件复制到设备。
在远程设备上,布局将复制到以下默认位置: \\MY-DEVKIT\DevelopmentFiles\PACKAGE-REGISTRATION-PATH
从网络注册布局
当你选择从网络注册布局时,可以先将包布局构建到网络共享中,然后直接通过网络在远程设备上注册该布局。 这需要指定可从远程设备访问的布局文件夹路径(网络共享)。 布局文件夹路径 属性是指设置为相对于运行 Visual Studio 的电脑的文件夹路径,而 包注册路径 属性使用的是相同的路径,但指定为相对于远程设备。
若要成功从网络注册布局,必须首先将 布局文件夹路径 设置为共享网络文件夹。 为此,请右键单击文件资源管理器中的文件夹,选择 “与 > 特定人员共享”,然后选择要与之共享文件夹的用户。 当您尝试从网络注册布局时,系统会提示输入凭据,以确保您是有权访问网络共享的用户。
要获得对此的帮助,请参阅以下示例。
示例 1(本地布局文件夹,可通过网络共享进行访问):
-
布局文件夹路径 =
D:\Layouts\App1
-
包注册路径 =
\\NETWORK-SHARE\Layouts\App1
-
布局文件夹路径 =
示例 2 (网络布局文件夹):
-
布局文件夹路径 =
\\NETWORK-SHARE\Layouts\App1
-
包注册路径 =
\\NETWORK-SHARE\Layouts\App1
-
布局文件夹路径 =
首次通过网络注册布局时,您的认证信息将缓存在目标设备上,因此无需重复登录。 若要删除缓存的凭据,可以使用 Windows 10 SDK 中的 WinAppDeployCmd.exe 工具 和 deletecreds 命令。
当你从网络注册布局时,由于没有文件被实际复制到远程设备上,因此无法选择 保留设备中的所有文件。
注释
目前在运行 Windows 10 周年更新的 Xbox 和运行 Windows 10 创作者更新的电脑上支持来自网络 的寄存器布局。
在远程设备上,布局根据设备系列将注册到以下默认位置:Xbox: \\MY-DEVKIT\DevelopmentFiles\XrfsFiles
- 这是 包注册路径的符号链接, PC 不使用符号链接,而是直接注册 包注册路径
调试选项
在 Windows 10 上,通过使用一种称为 预启动 的技术,主动启动并挂起应用程序,以改进 UWP 应用的启动性能。 许多应用不需要执行任何特殊作才能在此模式下工作,但某些应用可能需要调整其行为。 为了帮助调试这些代码路径中的任何问题,可以在预启动模式下从 Visual Studio 开始调试应用。
Visual Studio 项目支持调试(
可以在启动项目的 “调试 ”属性页上设置以下部署选项:
允许本地网络环回
出于安全原因,不允许以标准方式安装的 UWP 应用对安装它的设备进行网络调用。 默认情况下,Visual Studio 部署为已部署的应用创建此规则的豁免。 此豁免允许在单个计算机上测试通信过程。 在将您的应用提交到 Microsoft 应用商店之前,应测试您的应用且不使用豁免。
若要从应用中删除网络环回豁免,请执行以下作:
- 在 C# 和 Visual Basic
调试 属性页上,清除“允许本地网络环回”复选框。 - 在 JavaScript 和C++调试 属性页上,将 允许本地网络环回 值设置为 “无”。
- 在 C# 和 Visual Basic
不要启动,可调试我的代码在启动时 / 启动应用程序
若要将部署配置为在启动应用时自动启动调试会话,
- 在 C# 和 Visual Basic 调试 属性页上,选中“不启动,但在代码启动时进行调试” 复选框。
- 在 JavaScript 和 C++ 调试 属性页上,将 启动应用程序 的值设置为 是。
符号
符号文件包含调试代码时的各种非常有用的数据,例如变量、函数名称和入口点地址,使你可以更好地了解异常和调用堆栈执行顺序。 大多数 Windows 变体的符号可通过 Microsoft Symbol Server 获取,或者可以下载 Windows 符号包以便更快地进行脱机查找。
若要设置 Visual Studio 的符号选项,请选择 “工具 > 选项”,然后在对话框窗口中转到 “调试 > 符号 ”。
若要在具有 WinDbg的调试会话中加载符号,请将 同情 变量设置为符号包位置。 例如,运行以下命令将从Microsoft符号服务器加载符号,然后将其缓存在 C:\Symbols 目录中:
.sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
.reload
可以使用分隔符添加更多路径 ‘;’
,也可以使用 .sympath+
命令。 有关使用 WinDbg 的更高级符号操作,请参阅 公共符号和专用符号。
WinDbg
WinDbg 是一个功能强大的调试器,作为 Windows 套件调试工具的一部分提供,包含在 Windows SDK 中。 Windows SDK 安装允许将 Windows 调试工具安装为独立产品。 虽然对于调试本机代码非常有用,但我们不建议将 WinDbg 用于使用托管代码或 HTML5 编写的应用。
若要将 WinDbg 与 UWP 应用一起使用,首先需要使用 PLMDebug 禁用应用包的进程生命周期管理(PLM),如 进程生命周期管理(PLM)中所述。
plmdebug /enableDebug [PackageFullName] ""C:\Program Files\Debugging Tools for Windows (x64)\WinDbg.exe\" -server npipe:pipe=test"
与 Visual Studio 相比,WinDbg 的大部分核心功能都依赖于向命令窗口提供命令。 提供的命令允许查看执行状态、调查用户模式故障转储,以及以各种模式进行调试。
WinDbg 中非常流行的命令之一是 !analyze -v
命令,它用于检索有关当前异常的大量详细信息,包括:
- FAULTING_IP:故障时指令指针
- EXCEPTION_RECORD:当前异常的地址、代码和标志
- STACK_TEXT:异常之前的堆栈跟踪
有关所有 WinDbg 命令的完整列表,请参阅 调试器命令。