11

我正在为我的应用程序扩展支持的平台数量,它曾经支持 .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):等待/异步不起作用,未找到 CallerMember 名称,但如果我删除对它们的所有引用,Android 项目构建良好。

配置文件 147 (NET403+SL5+WP8+Store):等待/异步不起作用,未找到 CallerMember 名称,但如果我删除对它们的所有引用,Android 项目构建良好。

配置文件 158 (NET45+SL5+WP8+Store):等待/异步不起作用,未找到 CallerMember 名称,但如果我删除对它们的所有引用,Android 项目构建良好。

所以我不确定该选择什么。配置文件 78、104、147 是有限的,配置文件 78 是唯一同时支持等待/异步和 CallerMemberName 使用 BindableBase 的配置文件,但它在 Android 上失败并抱怨 System.Runtime.dll。因此,如果您对哪种 PCL 配置文件最适合针对 Mono 的 PCL 有经验,请分享您的想法。

4

1 回答 1

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(不知道平台是如何决定这个的......很久以前就放弃了!)

因此,我将 MvvmCross 定位在配置文件 104 上——它会在仍然需要 WP7.x 支持时保留在那里。

这种选择确实意味着 MvvmCross 不能开箱即用地支持async/awaitCallerMemberName- 但这是我们决定做出的妥协 - 我们有需要WP7 的用户。


但是,有些人在询问等待/异步...

要使用这些新功能,有一些 BCL.Async Nuget hack 可以使它们在配置文件 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。

于 2013-05-09T14:33:45.143 回答