MAUI和Uno平台有什么区别?

git*_*est 15 .net xaml uwp uno-platform maui

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

bas*_*ren 26

我已经使用 Xamarin.Forms(将更名为 MAUI)开发了 5 年以上,并且使用 Uno 平台进行了将近四个月的开发。对我来说,有许多差异使我值得花时间从 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 Community Toolkit 库。
  • 虽然我不能确定这一点,但我相信 Xamarin.Forms 已经比 Uno Platform 早了大约 2-3 年。话虽如此,Uno 已经在功能和代码质量方面迅速赶上了 Xamarin。我相信这部分是因为 UWP 是非常成熟的操作规范。
  • 根据我将约 132k 行 Xamarin.Forms 代码项目迁移到 Uno 的经验,Uno 明显不那么冗长,约 65k 行。几乎所有的减少都在 UI 代码行中(模型、视图模型和业务逻辑几乎没有受到影响)。这主要是由于 UWP (Uno) 控件具有更多功能。

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

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

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

  • 同意,保罗。请记下发布日期。当时,还没有可供评估的 MAUI 版本,因此比较现有的两种东西与一种已存在的东西和一种不存在的东西是合理的。现在,MAUI 已经有了一个粗略的(许多缺失元素)预发布版,我们可以看到它确实具有 UNO 中共享项目的一些优点,但仍然保留了视图渲染器设计模式(NSConsistancy 异常的来源)。另请注意,OP 询问了对 WPF 的支持 - 并且(目前)MAUI 支持的唯一平台是 iOS 和 Android。 (3认同)
  • @JunaidPathan:我必须恭敬地不同意你的观点。你引用的所有原因都是我最初开始研究 UNO 的原因。特别是Android性能问题!社区(通过 GitHub)支持几乎总是比我从 Microsoft 获得的企业合同支持更好。 (3认同)
  • 这应该是 MAUI 与 Uno,而不是 Xamarin.Forms 与 Uno。 (2认同)
  • Uno 根本无法与 Xamarin.Forms/MAUI 相比。Uno 有很多问题,用户界面滞后,还有很多性能问题。只需在 [Play 商店](https://play.google.com/store/apps/details?id=com.nventive.uno.ui.demo) 上试用他们的示例应用程序 Uno Gallery。用户界面甚至落后于最新的高端设备和硬件(请参阅 Play 商店上的评论)。他们的社区支持也很有限,请查看 StackOverflow(92 个观察者),我看到的最新问题自 5 天以来尚未得到解答,尽管有些问题在第二天得到了解答。仅当您想单独编码且 UI 滞后时才使用 Uno。 (2认同)

小智 5

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

其他需要考虑的事情是,MAUI 是 Microsoft API,UNO 不是(现在)我知道将来,微软倾向于购买他们喜欢且符合愿景的技术。

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

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

  • 我认为最后的说法是不正确的。目前,您无法在 .NET Core 上的 Linux 上运行 WPF。您可以在 Linux 上运行 .NET Core,但不能运行 WPF。 (10认同)