我正在努力扩展我的应用程序支持的平台数量,它曾经支持.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 是唯一支持使用 BindableBase 的等待/异步和 CallerMemberName 的配置文件,但它在 Android 上失败,抱怨 System.Runtime.dll。因此,如果您知道哪种 PCL 配置文件最适合针对 Mono 的 PCL,请分享您的想法。
考虑个人资料数字很困难 - 我更喜欢从平台角度考虑。
理想情况下,我希望我的项目能够支持:
- .Net 3.5 及更高版本
- SL3 及更高版本
- WP7.x 手机及更高版本
- MonoDroid 1.6 及更高版本
- MonoTouch iOS6 及更高版本
- (Mac 桌面 OSX Lion)
我支持的主要 PCL 项目是 MvvmCross - 它需要 Mvvm “设施”,例如 ICommand。这些设施仅在 .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
/await
and CallerMemberName
- 但这是我们决定做出的妥协 - 我们的用户need WP7.
然而,有些人在询问await/async...
要使用这些新功能,有一些 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。我相信这个平台must使用配置文件 78,因为 Microsoft 的 Reactive PCL 版本的目标是 78。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)