寻找跨平台开发的最佳PCL配置文件

时间:2013-05-09 14:11:48

标签: mono xamarin.ios xamarin.android portable-class-library

我正在努力为我的应用程序扩展支持的平台数量,它曾用于支持.NET4 / Windows Store / Windows Phone,但我希望也能用于Android和iOS的Mono。我已经将所有业务逻辑,模型和视图模型都放到了可移植类库(PCL)中,但是我应该针对哪个平台子集这是一个很大的困境。每种组合都会导致失败。以下是我可能使用的4个平台的结果:

Profile 78(NET45 + WP8 + Store):TPL,await / async和CallerMemberName属性支持没有问题(在BindableBase视图模型基类中使用)。但引用此​​类库的Mono.Android项目无法构建抱怨应该引用的不存在的System.Runtime.dll。

配置文件104(NET45 + SL4 + WP75 + Store):await / async不起作用,找不到CallerMember名称,但是如果删除对它们的所有引用,Android项目构建正常。

配置文件147(NET403 + SL5 + WP8 + Store):await / async不起作用,找不到CallerMember名称,但如果删除对它们的所有引用,Android项目构建正常。

配置文件158(NET45 + SL5 + WP8 + Store):await / async不起作用,找不到CallerMember名称,但如果删除对它们的所有引用,Android项目构建正常。

所以我不确定该选择什么。配置文件78,104,147是有限的,配置文件78是唯一支持await / async和CallerMemberName使用BindableBase的配置文件,但它在Android上失败,抱怨System.Runtime.dll。因此,如果您对PCL配置文件是PCL定位Mono的最佳匹配体验,请分享您的想法。

1 个答案:

答案 0 :(得分:11)

考虑个人资料数字很难 - 我更愿意考虑平台。

理想情况下,我喜欢我的项目支持:

  • .Net 3.5及更高版本
  • SL3及以上
  • WP7.x手机及更高版本
  • MonoDroid 1.6及更高版本
  • MonoTouch iOS6及更高版本
  • (Mac桌面OSX Lion)

我支持的主要PCL项目是MvvmCross - 这需要像ICommand这样的Mvvm'设施'。这些设施仅适用于.Net 4.5及更高版本的平台...这是一个硬限制 - 我无能为力 - 所以改变了我的需求:

  • .Net 3.5及更高版本 .Net 4.5
  • SL3及更高 SL4及更高
  • WP7.x手机及更高版本
  • MonoDroid 1.6及更高版本
  • MonoTouch iOS6及更高版本
  • (Mac桌面OSX Lion)

有了这个选择,那么这会让我看到一个简档号码--104(不知道平台如何决定这个......很久以前放弃了询问!)

所以我在配置文件104中定位了MvvmCross - 它仍将保留在那里,同时仍然需要WP7.x支持。

此选择确实意味着MvvmCross无法开箱即用支持async / awaitCallerMemberName等内容 - 但这是我们决定做出的妥协 - 我们的用户需要 WP7。


然而,有些人在询问等待/异步......

要使用这些新功能,有一些BCL.Async Nuget黑客可以使它们在配置文件104中工作......或者这些用户可以在更新的配置文件中定位他们的应用程序(不支持WP7.x和SL4的应用程序) ) - 这导致他们在配置文件78中构建他们的应用程序,但是添加对我的配置文件104程序集的引用。

这些解决方案中的任何一套目前都不适用于Xamarin双胞胎 - 例如你遇到了缺少System.Runtime.dll程序集的问题。但是,我预计当Xamarin正式支持PCL(并经过一些alpha / beta测试)后,这些问题将得到解决。这个官方支持很快就会到期 - 这就是为什么我不花太多时间考虑这些问题......


我预计在中期内,MvvmCross将放弃对WP7.x和SL4的支持。当发生这种情况时,我们也可能将核心库移动到配置文件78.


我知道已启动PCL支持的唯一其他大型平台是ReactiveUI。我相信这个平台必须使用配置文件78,因为Microsoft的Reactive的PCL版本定位为78.