第 3 部分 - 设置 Xamarin 跨平台解决方案

无论使用哪种平台,Xamarin 项目都会使用相同的解决方案文件格式(Visual Studio .sln 文件格式)。 即使无法加载单个项目(例如 Visual Studio for Mac 中的 Windows 项目),也可以跨开发环境共享解决方案。

创建新的跨平台应用程序时,第一步是创建空白解决方案。 本部分介绍接下来发生的事情:设置用于生成跨平台移动应用的项目。

共享代码

有关如何实现跨平台代码共享的详细说明,请参阅代码共享选项文档。

.NET Standard

.NET Standard 项目提供了一种跨平台共享代码的简单方法,可以生成可跨 Windows、Xamarin 平台(iOS、Android、Mac)和 Linux 使用的程序集。 这是共享 Xamarin 解决方案代码的建议方式。

其他选项

过去,Xamarin 使用可移植类库 (PCL)] 和共享项目。 不建议将它们用于新项目;应考虑迁移现有应用以使用 .NET Standard。

填充解决方案

无论使用哪种方法来共享代码,整体解决方案结构都应该实现鼓励代码共享的分层体系结构。 Xamarin 方法是将代码分组为两种项目类型:

  • 核心(或“共享”)项目 – 在一个位置编写可重用的代码,以便在不同的平台之间共享。 尽可能使用封装原则来隐藏实现细节。
  • 特定于平台的应用程序项目 – 使用可重用的代码,并尽可能减少耦合度。 在此级别添加特定于平台的功能,这些功能是基于核心项目中公开的组件构建的。

核心项目

共享代码的核心项目应该是 .NET Standard,并且仅引用跨所有平台可用的程序集 - 即 SystemSystem.CoreSystem.Xml 等常见框架命名空间。

核心项目应尽可能多地实现非 UI 功能,其中可能包括以下层:

  • 数据层 – 负责物理数据存储的代码,例如 SQLite-NET 甚至 XML 文件。 数据层类通常仅由数据访问层使用。
  • 数据访问层 – 定义一个 API 用于支持应用程序功能所需的数据操作,例如访问数据列表、单个数据项以及创建、编辑和删除它们的方法
  • 服务访问层 – 向应用程序提供云服务的可选层。 包含访问远程网络资源(Web 服务、图像下载等)以及可能的结果缓存的代码。
  • 业务层 – 模型类和外观或管理器类的定义,向特定于平台的应用程序公开功能

特定于平台的应用程序项目

特定于平台的项目必须引用绑定到每个平台的 SDK(Xamarin.iOS、Xamarin.Android、Xamarin.Mac 或 Windows)以及 .NET Standard 项目所需的程序集。

特定于平台的项目应实现:

  • 应用程序层 – 平台特定的功能以及业务层对象和用户界面之间的绑定/转换
  • 用户界面层 – 屏幕、自定义用户界面控件、验证逻辑的呈现

项目引用

项目引用反映项目的依赖项。 核心项目会限制对通用程序集的引用,使代码易于共享。 特定于平台的应用程序项目引用 .NET Standard 项目,以及利用目标平台所需的任何其他特定于平台的程序集。

案例研究中提供了有关如何构建项目的具体示例。

添加文件

生成操作

为某些文件类型设置正确的生成操作非常重要。 此列表显示了一些常见文件类型的生成操作:

  • 所有 C# 文件 – 生成操作:编译
  • Xamarin.iOS 和 Windows 中的图像 – 生成操作:内容
  • Xamarin.iOS 中的 XIB 和情节提要文件 – 生成操作:InterfaceDefinition
  • Android 中的图像和 XML 布局 – 生成操作:AndroidResource
  • Windows 项目中的 XAML 文件 – 生成操作:页面
  • Xamarin.Forms XAML 文件 – 生成操作:EmbeddedResource

通常,IDE 会检测文件类型并建议正确的生成操作。

事例敏感性

最后,请记住,某些平台使用区分大小写的文件系统(例如 iOS 和 Android),因此请务必使用一致的文件命名标准,并确保代码中使用的文件名与文件系统完全匹配。 这对于在代码中引用的图像和其他资源尤为重要。