我目前已经构建了一个服务层和 API,我正在从一个 ASP.NET 网站、Windows Phone 应用程序和一个 Windows 8 Metro 应用程序中使用它们——它们的关键是一个包含模型类的项目,它是一个可移植类库项目,并在所有项目之间共享作为参考。该架构运行良好,没有任何问题。
但是,我最近开始尝试使用 Xamarin - 特别是 iOS 功能(以期稍后迁移到 Android)。我最初的假设是,我可以像使用其他项目一样使用这个模型库 - 但是,我已经意识到情况并非如此。
当我第一次向我的 Xamarin.iOS 项目(在 Visual Studio 中)添加对我的模型类库的引用时,我遇到了错误:
'当前项目不支持对便携式库项目的引用'。
奇怪 - 因为我认为这将是一个支持的场景。我在这里找到了一个帖子,它建议了一个修复程序,该修复程序强制 Visual Studio 检测 Monotouch (Xamarin) 框架是否支持便携式库项目。似乎正是我所需要的——但不是。当我再次添加引用时,我遇到了另一个错误:
'当前项目的目标框架与便携式库项目的目标框架不兼容'。
它建议我更改项目属性中的目标框架。除了我不能,因为 Xamarin iOS 项目需要支持 Monotouch(无论如何我都不能从 GUI 将它更改为其他任何东西)。所以我试着改变模型库的属性——也许我可以在那里做点什么。看起来我可以。我可以在这里检查 Monotouch (Xamarin) 作为受支持的平台(已经检查了 Windows 手机、Windows 商店等),但它不会让我保存。它只显示消息:
'您选择的目标框架不支持其他功能'
经过一番研究,我发现 Xamarin 建议共享代码的唯一方法是使用带有链接代码文件的单独项目(因此实际上是一个伪单一代码库。我已经尝试过并且可以工作 - 但它似乎是一个 hack。见这里:
那么这是唯一的选择吗?或者有没有办法在所有平台上拥有一个真正的单一类(模型)库,包括 Microsoft 和 Xamarin?