#cargo-command #uwp #cargo-build #build-tool #build-system #build-script #windows

app cargo-uwp

自定义 Cargo 命令,用于创建、管理和打包 UWP 应用程序

4 个版本

0.2.2 2022 年 6 月 7 日
0.2.1 2021 年 8 月 15 日
0.2.0 2021 年 8 月 14 日
0.1.0 2021 年 8 月 13 日

#310Cargo 插件

MIT/Apache

43KB
818

crates.io platform-support

cargouwp

这是一个自定义 Cargo 命令,用于创建、管理和打包 UWP 应用程序。

简介

Windows 开发者可以选择针对多个不同的应用程序模型进行编写。针对通用 Windows 平台 (UWP) 的挑战在于需要大量转换和基础设施工件来将源代码转换为可执行文件或可部署的应用程序包。

cargo uwp 旨在使此过程不那么繁琐,减少错误的机会,并尽早捕捉错误。它可以生成一个适合 UWP 的 Cargo 包,以及一个 Cargo 构建脚本,该脚本管理打包和部署所需的构建工件。

生成的起始包依赖于 windows-rs 包作为 Rust 的 Windows 运行时投影。这不是一个硬性要求,但这种情况可能随着时间的推移而改变。

入门

安装

由于这是一个自定义 Cargo 命令,我们可以合理地假设 Cargo 已经安装并且可访问。让我们继续前进并从命令提示符运行

cargo install cargo-uwp

以下载、编译和安装二进制文件。要确保 cargo uwp 成功安装,请运行以下命令

cargo uwp --version

这将打印出已安装二进制文件的版本。

第一个项目

一切设置妥当后,是时候生成一个新的 UWP Cargo 包了。遵循 Cargo 的先例,用于此目的的子命令命名为 new。以下

cargo uwp new uwp-rs

将设置一个新的名为 uwp-rs 的Cargo软件包。它会在下面调用 cargo new,并对软件包进行一些修改以使其适用于UWP。你可能想直接使用 cd 进入目录并执行 cargo build。之前,由于缺少元数据而失败。从版本0.2.0开始,构建将自动成功。构建脚本现在在遇到 [package.metadata.appxmanifest] 表中的默认值时,将发出警告。

在打包或部署应用程序之前,需要解决这些警告,但为了本地测试,可以保持现状。

cargo build

现在将在 target\x86_64-uwp-windows-msvc\debug 中生成一个名为 uwp-rs.exe 的二进制文件,准备启动。

启动应用程序

当然,你可能想直接这么做,但结果是一个错误对话框。就像任何UWP一样,启动应用程序既不简单也不明显。为此,需要首先注册应用程序。

现在,这里仍然需要手动步骤,即把 Assets 文件夹复制到目标目录(target\x86_64-uwp-windows-msvc\debug)。打开命令提示符并导航到输出目录,执行以下操作

mkdir Assets
copy ..\..\..\Assets\* Assets\

命令提示符仍然打开,现在一切准备就绪,进入高潮部分

powershell -command "Add-AppxPackage -Register AppxManifest.xml"

如果一切顺利,你现在应该在开始菜单中看到你的UWP应用程序,准备启动。这次是真正的启动。

提示:如果你不知道你的UWP应用程序去哪儿了,只需打开命令提示符并输入

%windir%\explorer.exe shell:appsFolder

以找到它,并将其再次固定到开始菜单上。

调试

从Visual Studio Code调试Rust应用程序从来不是一个很有趣的经历。你可能会惊讶地发现,Visual Studio做得更好,即使没有Rust支持。

调试已安装的UWP应用包,请启动Visual Studio(2017或更高版本),打开 调试 菜单,展开 其他调试目标 项,然后选择 调试已安装应用包...。一旦找到你的新应用程序,你可以点击 启动,然后开始。

当应用程序正在运行时,转到 文件打开,然后选择 文件...。导航到应用程序对应的源,加载 main.rs。你现在可以设置断点,例如在 button.Click() 处理器上,单步执行代码,检查局部变量。以及内存。

Rustc方便地将 .natvis 可视化器 添加到为 许多Rust标准库类型 生成的PDB中,所以从一开始事情看起来就相当合理。不幸的是,这并不是由 windows-rs 生成的Windows Runtime投影的情况,导航这些类型需要深入了解生成代码的内部。

尽管如此,能够看到函数调用返回了 OkErr 变体,这比Visual Studio Code曾经提供给困惑的本机开发者要多。

下一步

到这里已经做了很多工作。当然,你不会仅仅为了好玩而做这些。毕竟,你想要分享你的工作,并将你的UWP应用程序打包以供部署。

首先,您需要回到并提供在[package.metadata.appxmanifest]表中具有意义的值。继续使用默认值可能会导致部署应用程序失败或产生意外的后果。清理这些问题后,您就可以将您的UWP应用程序打包、捆绑并上传到商店了。遗憾的是,这些功能还没有通过cargo uwp实现。但这还不是结束。

未来工作

目前还处于早期阶段,许多功能和工具支持都还不足。在当前状态下,cargo uwp可以用来生成可打包、签名、捆绑和通过Microsoft Store部署的工件。大多数过程都是手动进行的,未来的工作将解决这些不足。

  • 简化测试的注册过程
  • 简化.appx包的生成
  • 允许捆绑.appxbundle
  • 实现.appxsym支持以获得更好的诊断
  • 打包签名和自签名证书生成
  • ...以及更多

如果您在使用此工具时遇到问题、建议或功能请求,请确保提交一个问题

依赖项

~5–13MB
~141K SLoC