共享项目代码共享

使用共享项目可以编写由许多不同的应用程序项目引用的常见代码。 此代码作为每个引用项目的一部分进行编译,并且可以包含编译器指令以帮助将特定于平台的功能合并到共享代码库中。

共享项目 (有时也称为共享资产项目) 允许编写多个目标项目(包括 Xamarin 应用程序)之间共享的代码。

它们支持编译器指令,以便你可以有条件地将特定于平台的代码编译为引用共享Project的项目的子集。 还有 IDE 支持来帮助管理编译器指令,并直观显示代码在每个应用程序中的外观。

如果过去曾使用文件链接在项目之间共享代码,则共享项目的工作方式类似,但 IDE 支持得到了很大的改进。

什么是共享Project?

与大多数其他项目类型不同,共享项目在 DLL 表单) 中没有任何输出 (,而是将代码编译到引用它的每个项目中。 下图说明了这一点 - 从概念上讲,共享Project的全部内容被“复制到”每个引用项目并编译,就像它是其中的一部分一样。

Shared Project architecture

共享Project中的代码可以包含编译器指令,这些指令将启用或禁用代码部分,具体取决于哪个应用程序项目正在使用代码,该代码由关系图中的彩色平台框建议。

共享Project本身不会编译,它纯粹是作为一组源代码文件,可以包含在其他项目中。 由另一个项目引用时,代码将有效地编译为该项目的 一部分 。 共享项目不能引用任何其他项目类型, (包括其他共享项目) 。

请注意,Android应用程序项目不能引用其他Android应用程序项目,例如,Android单元测试项目不能引用Android应用程序项目。 有关共享Project的详细信息。

Visual Studio for Mac 演练

本部分介绍如何使用 Visual Studio for Mac创建和使用共享Project。 有关完整示例,请参阅“共享Project示例”部分。

创建共享Project

若要创建新的共享Project请导航到“文件>新建解决方案...” (或右键单击现有解决方案并选择“添加新>Project...”) :

New Shared Project

在下一个屏幕上,选择项目名称,然后单击“ 创建”。

下面显示了新的共享Project - 请注意,没有引用或组件节点;共享项目不支持这些节点。

Empty Shared Project

若要使共享Project有用,至少需要由一个可生成的项目 (引用,例如iOS或Android应用程序或库,或 PCL 项目) 。 如果没有引用共享Project,则不会编译共享Project,因此语法 (或任何其他) 错误在被其他内容引用之前不会突出显示。

添加对共享Project的引用与引用常规库项目的方式相同。 此屏幕截图显示了 Xamarin。iOS引用共享Project的项目。

Project reference to Shared Project

由另一个库或应用程序引用共享Project后,可以生成解决方案并查看代码中的任何错误。 当共享Project由两个或多个其他项目引用时,源代码编辑器左上角会显示一个菜单,其中显示了哪些项目引用此文件。

共享Project选项

右键单击共享Project并选择“选项”时,设置比其他项目类型少。 由于共享项目不会在其自己的) (编译,因此不能设置输出或编译器选项、项目配置、程序集签名或自定义命令。 共享Project中的代码有效地从引用这些值的任何值继承。

选项”屏幕如下所示 - “Project名称和默认命名空间”是唯一将更改的两个设置。

Shared Project Options

共享Project示例

Tasky 示例使用共享Project来包含iOS、Android和Windows Phone应用程序使用的常见代码。 SQLite.cs源代码TaskRepository.cs文件都利用编译器指令 (,例如 #if __ANDROID__ ,) 为每个引用它们的应用程序生成不同的输出。

完整的解决方案结构如下所示,Visual Studio for Mac和Visual Studio分别) (:

即使Visual Studio for Mac中不支持该项目类型编译,也可以从Visual Studio for Mac内导航Windows Phone项目。

正在运行的应用程序如下所示:

iOS, Android, Windows Phone examples

总结

本文档介绍了共享项目的工作原理、如何在Visual Studio for Mac和Visual Studio中创建和使用共享项目,并引入了演示共享Project操作的简单示例应用程序。