令人失望的第一次 UNO 经历。只有 WASM 有效

Mar*_*son 5 uno uno-platform

我已经度过了周末,但仍然无法让“Hello, World”工作。视觉工作室:

2022 Version 17.0.4
2022 Preview Version 17.1.0 Preview 1.1
Run Code Online (Sandbox Code Playgroud)

uno-check 说一切都很好: 在此输入图像描述

这是我的运行时间: 在此输入图像描述

WUX 或 MUX(UWP 或桌面)风格的 WinUI 都不起作用。Android 模拟器即将推出,但 Hello World 未部署。已检测到本地 Android 设备,但未部署。Linux (Skia.GTK) 不工作。

WASM 能够显示文本“Hello, World”。

哇!看完最近的版本 4 发布发布会的每一分钟,我都感到很兴奋。但如果让事情运行起来就这么困难……?

我决心让它发挥作用……但这似乎是一个主要的、没有成效的项目。世界上只有我一个人有困难吗?

标记

Mar*_*son 4

好的,我能够让 WinUI(桌面)、WASM、Skia(适用于 Windows 7 的 WPF)、Skia(适用于 Linux 的 GTK)和 Android 与“Hello,World”一起工作。让我分享我所学到的东西,并希望其他人不要经历我所经历的痛苦经历。

当然,在执行以下步骤之前,您需要安装并运行unocheck,因此请按照文档进行操作并确保所有问题均得到解决。

一旦你通过了unocheck,那么:

  1. 首先,忘记使用 .NET 6!他们还没准备好。这就是我花费大部分时间的原因。Uno 4 可能会宣传为 .NET 6 兼容,而且它们已经很接近了……但它们还没有实现。

  2. 忘记在 Visual Studio 中使用项目模板。令人惊讶的是,即使在发布 4.0 版本之后,他们还没有完成开发人员想要的最重要项目的模板:WinUI 3 桌面。因此,现在只需关注使用 CLI 来安装和调用模板。

打开 cmd 提示符并使用以下命令安装模板:

dotnet new -i Uno.ProjectTemplates.Dotnet
Run Code Online (Sandbox Code Playgroud)

这将安装几个模板。如果你想创建一个基于WinUI 3 Desktop (Win32)版本的跨平台应用程序,那么:

首先创建包含文件夹(如C:\Users\Mark\Code)。然后,使用命令提示符导航到此文件夹,并在此文件夹中输入以下命令:

dotnet new unoapp-winui -o SolutionName
Run Code Online (Sandbox Code Playgroud)

这将产生一个以打包的 WinUI 3 Desktop 作为主要开发头的 .NET 5 解决方案。WinUI 3 头将依赖于最新的 WindowsAppSDK 版本。1.0(以前称为“团聚项目”)。

不要使用以下命令:

dotnet new unoapp-winui-net6 -o SolutionName
Run Code Online (Sandbox Code Playgroud)

这将产生一个 .NET 6 解决方案,该解决方案将被搞砸并且无法工作。

希望他们能在未来几周内纠正所有这些问题。我只想等到 NVentive 发布更新的 Visual Studio 模板,支持 .NET 6 的 WinUI 3。然后就可以轻松地将您的解决方案从 .NET 5 升级到 .NET 6。

  1. 当您运行 dotnet newunoapp-winui -o SolutionName命令时,您会注意到几个项目无法正确“恢复”:

在此输入图像描述

要解决此问题,请使用命令提示符导航到每个失败的项目并输入命令:

dotnet restore
Run Code Online (Sandbox Code Playgroud)

现在您已准备好使用 Visual Studio 启动您的解决方案。选择 WinUI 3 打包项目作为启动项目并尝试运行“Hello, World”。
4.您可能会收到此错误:

Error    MSB3270 There was a mismatch between the processor architecture of the project being built "AMD64" and the processor architecture of the reference ..."
Run Code Online (Sandbox Code Playgroud)

如果是这样,请打开构建配置并检查您的打包和主 WinUI 3 项目是否使用不同的 CPU 目标,如下所示(BFRLE 是我的解决方案的名称):

在此输入图像描述

BFRLE.Windows.Desktop我通过更改to的目标平台x64以匹配打包项目来修复此问题。当您在配置管理器中时,请确保 Android 项目已部署(否则在调试期间它将不会部署)。

  1. 接下来,确保您的计算机上安装了 GTK+3 运行时。你可以在这里这样做:

https://github.com/tschoonj/GTK-for-Windows-Runtime-Environment-Installer/releases

在 中不会检查此运行时的缺失unocheck

  1. 我还安装了 WSL。

此时,您应该能够将“Hello, World”作为本地 WinUI 3 桌面应用程序、IIS Express 托管的 WASM 应用程序、Skia.WPF.Host 应用程序和 Skia.Gtk 应用程序运行。我没有尝试运行 MacOS 或 iOS 版本,因为它们需要物理硬件。我确实尝试连接我的旧 Android 手机(Galaxy Note 5,OS 7 API 24)。当然,要让手机被识别,您必须启用开发人员模式并启用 USB 调试(请参阅在线文档)。为了让我的手机被识别......必须禁用快速部署。即使在这让我的手机进行通信之后,我也无法成功部署到这部旧手机(我怀疑我需要更新我的手机)。

  1. 为了使用虚拟 Android 模拟器,您需要转到 Android 项目的项目属性并启用快速部署和增量 Android 打包,如下所示:

在此输入图像描述

  1. 您可以通过启用 Windows 和 BIOS 中的设置来加速虚拟 Android 模拟器,如下所述:

https://learn.microsoft.com/en-us/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?pivots=windows

上面的步骤终于让事情对我有用了。我使用的是 VS 2022 还是 VS 2022 预览版并不重要——所以你少了一件需要担心的事情。

现在讨论让真正的应用程序跨平台运行的更有趣的问题。