22

我有点困惑。任何人都可以准确解释两者之间的区别吗?我们什么时候应该使用 MAUI,什么时候应该使用 UNO?我意识到,两者都可以在不同的平台上运行,那么同时引入两种不同技术的原因是什么?它们可以在 Windows 7 上运行吗?还是它们仅限于 Windows 10?我的 WPF 程序可以使用这两种技术在 Linux 上运行吗?

4

3 回答 3

28

我已经使用 Xamarin.Forms(将更名为 MAUI)开发了 5 年多,并且使用 Uno Platform 开发了 4 个月。对我来说,有许多不同之处让我值得花时间从 Xamarin.Forms 迁移到 Uno。一、相似之处:

  • 两者都是 C# 跨平台框架
  • 两者都支持 XAML
  • 两者都通过非 .Forms Xamarin 平台框架支持 iOS、Android、通用 Windows 平台和(在较小程度上)Mac OS。
  • Xamarin.Essentials 在上述平台上与 Xamarin 和 Uno 一起使用
  • 两者都没有对打印、PDF 生成或 PNG 生成的内置支持。

现在的区别:

  • 在架构上,Xamarin.Forms 是它自己的抽象层,位于本机 API 之上,因为 Uno 在本机 API 上构建 UWP 接口。在我看来,这是最重要的区别,原因有以下三个:
    • 在 Android 中,Xamarin.Forms 抽象包括测量和布局管理。这是非常昂贵的,而且对于除了最简单的列表视图之外的所有视图,都会导致性能非常差。相比之下,Uno 在本机层执行此操作 - 从而避免了 Java 和 C# 之间的大量来回传递。
    • 在 WASM 中,Xamarin 通过 Blazor 进行渲染——它支持混合服务器/客户端应用程序。不幸的是,与 Uno 采用的方法相比,这增加了复杂性。Xamarin 方法是否有性能损失还有待观察。
    • 因为 Uno 在原生 UI 框架上构建 UWP,所以打开封面并在功能上进行深度更改非常简单。在 Xamarin.Forms 中执行此操作要困难得多(如果在某些情况下不是不可能的话)。
  • Uno 强烈支持 WPF(所以是的,它可以在 Windows 7 中运行)、Tizen 和 Linux (GTK)。
  • Uno 支持 UWP XAML 的复杂性 - 如果您有 WPF 或 UWP 经验,那么它具有一些主要优势。否则,它会在你身上消失,就像在我身上一样。我希望改变这一点。
  • Uno 支持 WinUI 和 Windows 社区工具包库。
  • 虽然我不能确定这一点,但我相信 Xamarin.Forms 的存在时间比 Uno Platform 长了大约 2-3 年。话虽如此,Uno 在功能和代码质量方面已迅速赶上 Xamarin。我相信这部分是因为 UWP 作为非常成熟的操作规范。
  • 根据我将大约 132k 行 Xamarin.Forms 代码的项目迁移到 Uno 的经验,Uno 明显不那么冗长,大约为 65k 行。几乎所有这些减少都在 UI 代码行中(模型、视图模型和业务逻辑几乎没有受到影响)。这主要是由于功能丰富的 UWP (Uno) 控件可以有更多的功能。

最后,您询问您的 WPF 程序是否可以使用这两种技术在 Linux 上运行。答案是

  • Xamarin.Forms:不。不支持 Linux;
  • Uno Platform:不,但可以迁移您的代码。这项工作与将您的程序从 WPF 移植到 UWP 大致相同。

你的旅费可能会改变。但是,如果您有 WPF 或 UWP 方面的经验,我强烈推荐 Uno。如果您都没有这方面的经验,那么我会推荐 Uno,因为它在 Android 上具有卓越的性能。

于 2020-12-09T18:42:52.580 回答
4

不同的观点是,此时您只能将 UNO 与 Xamarin.Forms 今天所做的进行比较。如果您是 MAUI 团队的成员,那么您应该照亮道路,但我不是。您真的不知道为了提高性能而进行了哪些结构更改,最近微软非常重视性能 - 所以我猜他们肯定会在 Java/C# 的鸿沟上努力工作。

需要考虑的另一件事是 MAUI 是 Microsoft API,UNO 不是(现在) Wo 知道将来,Microsoft 倾向于购买他们喜欢并符合愿景的技术。

如果您现在需要跨平台开发,您正在比较现在可用的 UNO 和 Xamarin.Forms。如果不延迟,MAUI 将在 2021 年宣布。

现在回答您真正的问题:您现在可以使用 .NET Core 在 linux 上运行 WPF,您无需等待 MAUI 或退出 Microsoft API。

于 2020-12-23T17:08:17.797 回答
1

Uno 团队还在文档中讨论了这个问题 - https://platform.uno/docs/articles/intro.html#how-is-uno-platform-different-from-net-maui

Uno Platform 应用程序是跨平台的,可以在 Web 以及移动和桌面上运行,同样地,来自单个代码库。Blazor 是 ASP.NET 的一项功能,主要用于构建 Web 应用程序。

Uno 平台应用程序是用 C# 和 XAML 标记编写的,而 Blazor 应用程序是用“Razor”语法编写的,它是 HTML/CSS 和 C# 的混合体。

Uno Platform 和 Blazor 都利用 .NET 的 WebAssembly 支持在浏览器中本地运行。

于 2021-04-01T19:27:43.257 回答