.net - MAUI 和 Uno 平台有什么区别?

标签 .net xaml uwp uno-platform maui

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

最佳答案

我已经使用 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 是它自己的抽象层,位于 native API 之上,因为 Uno 在 native API 上构建 UWP 接口(interface)。在我看来,这是最重要的区别,原因有以下三个:
  • 在 Android 中,Xamarin.Forms 抽象包括测量和布局管理。这是非常昂贵的,而且对于除了最简单的 ListView 之外的所有 View ,都会导致性能非常差。相比之下,Uno 在 native 层执行此操作 - 从而避免了 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 在功能和代码质量方面已迅速 catch Xamarin。我相信这部分是因为 UWP 作为非常成熟的操作规范。
  • 根据我将大约 132k 行 Xamarin.Forms 代码的项目迁移到 Uno 的经验,Uno 明显不那么冗长,大约为 65k 行。几乎所有这些减少都在 UI 代码行中(模型、 View 模型和业务逻辑几乎没有受到影响)。这主要是由于功能丰富的 UWP (Uno) 控件可以有更多的功能。

  • 最后,您询问您的 WPF 程序是否可以使用这两种技术在 Linux 上运行。答案是
  • Xamarin.Forms:不。不支持 Linux;
  • Uno Platform:不,但可以迁移您的代码。这项工作与将您的程序从 WPF 移植到 UWP 大致相同。

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

    关于.net - MAUI 和 Uno 平台有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65139627/

    相关文章:

    c# - 如何在 UWP 中为 CaptureElement 制作圆角?

    c# - 如何使用UWP中的代码模拟Tab键按下

    c# - Microsoft.Extensions.Logging 记录器包装器的实现和使用

    .net - 如何在 .Net REST WCF 服务中实现两阶段提交?

    asp.net - MVC3 和 Entity Framework

    c# - 指定的对象或值不存在

    c# - 从 WPF 中的一个 UserControl 中的 PropertyChanged 命令更新其他 ViewModel 和容器表单

    Windows7 上的 WPF 文本框边框

    c# - 在特定位置显示 UI 元素上方的浮出控件

    .net - application/problem+json 和 .net 6 最小 API?