Xamarin.Mac 的目标框架

本文介绍 Xamarin.Mac 可用的目标框架(基类库),以及在 Xamarin.Mac 项目中使用这些框架的意义。

Target framework options for Xamarin.Mac

背景

每个 .NET 程序或库都依赖于基类库 (BCL) 提供的功能。 该 BCL 包括 mscorlib、System、System.Net.Http 和 System.Xml 等程序集,这些程序集提供所有 .NET 语言内置的常用功能。

多年来,该 BCL 已开发出多个不同版本,针对不同用例进行了优化。 “桌面”BCL 包含一组更丰富的库,这可能对于其他用例来说过于庞大,而移动则侧重于确保 API 能够安全地进行链接,通过移除未使用的代码来减小应用程序的占用。

这些不同目标框架的一个较重要影响是,特定程序中的所有程序集必须以兼容的 BCL 程序集为目标。 如果不是这种情况,会出现两个程序集针对不同版本的 System.dll 链接时,对给定类型的签名产生分歧。 共享库既可以针对 .NET Standard 2(目标框架的常用子集),也可以针对特定的目标框架。

Xamarin.Mac 有三种目标框架可供选择,每种都有不同的优势和权衡:

  • 新式(旧文档中称为“移动”)- 与支持 Xamarin.iOS 非常相似的子集,针对性能和大小进行了高度优化。 该目标框架是链接器安全的,因此这些项目可以通过删除未使用的代码来大幅减少其最终占用空间。

  • 完全(在旧文档中称为“XM 4.5”)- 与“桌面”BCL 非常相似的子集,有少量删减。 由于目标框架与 net45(及更高版本)几乎完全相同,它可以轻松使用许多不提供 netstandard2 或特定 Xamarin.Mac 生成的 nuget。 但是,由于使用了 System.Configuration,它与链接不兼容。

  • 不支持(旧文档中称为“系统”)- 不链接到 Xamarin.Mac 提供的 BCL,而是使用当前系统安装的 mono。 这提供了最完整的程序集,包括一些已知有问题的程序集(例如 System.Drawing)。 该选项仅作为“最后手段”存在,强烈建议在用尽其他选项后再使用此选项。 顾名思义,它的使用不受官方支持渠道支持。

设置目标框架

若要更改为 Xamarin.Mac 项目的目标框架类型,请执行以下操作:

  1. 在 Visual Studio for Mac 中打开 Xamarin.Mac 项目。

  2. 在“解决方案资源管理器”中,双击项目文件打开“项目选项”对话框。

  3. 从“常规”选项卡中,选择适合应用程序需求的“目标框架”类型:

    Using the Project Options window to choose a target framework

  4. 单击“确定”按钮保存更改。

切换目标框架类型后,应“清理”,然后“重新生成”Xamarin.Mac 项目

总结

本文简要介绍了可供 Xamarin.Mac 应用程序使用的不同类型的目标框架(基类库),以及何时应使用每种类型的框架。