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

2024-02-18

我正在努力扩展我的应用程序支持的平台数量,它曾经支持.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(使用前将#替换为@)

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

随机推荐

  • 使用 PendingIntent 托管在不同进程中的服务和活动之间的通信

    我正在从一个片段启动一个前台服务 该片段在调用后被破坏startService 这是我无法使用的原因ResultReceiver or Messanger 所以选项仍然存在PendingIntent 如何使用 PendingIntent 在
  • 使用我自己的 UICollectionViewFlowLayout 子类滚动时 UICollectionView 项目消失

    上下文 我正在使用UICollectionView用于查看照片 每张图片都是一个单元格UIImage 图像可以有不同的尺寸 我希望它们填满整个屏幕 所以我写了一个类来确定每个单独的框架UICollectionCell并让一个子类UIColl
  • 更改 CakePHP 中的管理布局

    我在 cakephp 工作 我的 app config routes php 文件中有以下两行 and setup admin routing Router connect admin controller action array act
  • 为什么 sql.Open() 不应该返回 nil 作为错误?

    我正在尝试连接到 mysql 数据库 我尝试查看如果我提供了错误的连接信息是否会收到错误 但它仍然返回nil作为错误 即使我完全关闭 mysql 它仍然不会返回错误 如果此函数不返回错误 那么在该函数之后检查错误有何意义 这是在 Windo
  • iPhone 6 设备和模拟器上的快照方法被破坏

    由于某种未知的原因 iPhone 6 模拟器 和设备 上的所有屏幕截图方法似乎都可能存在错误 每当我调用任何屏幕截图方法时 包括 屏幕更新后的快照视图 可调整大小的SnapshotViewFromRect 绘制ViewHierarchyIn
  • 将表单输入值作为路径附加到操作 url

    我有一个这样的表格
  • 如何录制屏幕并保存为gif动画? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有这样的软件吗 尝试这个名为 Cropper 的免费工具 无限帧 将输出设置为动画 Gif http cropper codeplex com htt
  • iOS 动画在 iOS7 中的我的应用程序中停止工作

    我发现我的应用程序中的所有 ios 动画都停止工作 这种情况在 iOS7 中非常频繁地发生 我有一个支持 iOS 5 6 和 7 的应用程序 最近我发现所有 iOS 动画在 iOS7 中的应用程序中都停止工作 在 IOS 7 中 当在后台线
  • EditTextPreference 禁用按钮?

    我想要一个 EditTextPreference 如果 EditText 字段中没有文本 它将禁用 确定 按钮 我创建了一个自定义 EditTextPreference 类 并且能够获取 EditText 对象并设置 TextWatcher
  • Nginx 不接受字节范围

    我正在使用 nginx 来提供文件系统中的视频 我想启用范围请求 目前这是我的文件返回的结果 curl I fileurl HTTP 1 1 200 OK Server nginx Date Sat 29 Mar 2014 06 41 41
  • 使用Ansible、Jenkins和docker构建快速测试环境

    我计划使用ansible jenkins和docker一起构建测试环境 计划是这样的 为您在环境中使用的每个工具创建 ansible 剧本并将其存储在 git 上 使用 jenkins create job 在开发服务器上创建 docker
  • 如何使用 EF 在 MVC Code-first 中更新/创建多对多关系数据?

    我仔细研究了 StackOverflow Google 和 asp net 试图找到一个清晰 基本的示例来说明如何做到这一点 所有的例子都是抽象的或涉及不适用的复杂情况 我没能从他们身上获得太多有用的东西 到目前为止 他们都没有完全回答我的
  • Spring RestTemplate 将响应流式传输到另一个请求中

    我正在尝试使用 spring 将文件下载的结果直接流式传输到另一篇文章中RestTemplate 我目前的方法如下 ResponseEntity
  • 为express.js更新Cookie会话

    我正在使用cookie会话 https github com expressjs cookie sessionExpress js 处理会话的模块 我希望在每次页面加载 或ajax调用 时更新会话 这就是他们通常在任何地方工作的方式 文档对
  • Python + Selenium:从“ng-bind”获取跨度值

    所以我有 Selenium 代码可以使用 chrome 访问页面 现在在该页面上有这样的 HTML span Heloooo span 如何使用 python 和 Selenium 获取值 所以只有Heloooo 谢谢 您可以使用以下 CS
  • $.proxy() 和 bind() 有什么区别?

    2009 年 ECMAScript 5 添加了一个内置的bind 函数接受一个对象作为参数并返回一个相同的函数 其中this将始终引用您传递给它的对象 我找不到任何看起来像规范文档链接的内容 这与jQuery 的 proxy 功能 http
  • 处理 Yesod 表单中的数据集合

    是否有可能在Yesod https en wikipedia org wiki Yesod web framework 处理包含数据集合的表单 我有一个用户可以添加多个人的表单 在前端它目前看起来像这样 people map person
  • 使用 AFNetworking 下载大文件

    我正在尝试实现大文件的下载并向用户显示当前进度 但阻止 AFURLConnectionOperation setDownloadProgressBlock 返回不正确bytesRead and totalBytesRead值 它们小于应有的
  • Hyperledger Fabric 的性能测试

    在尝试使用 Hyperledger Fabric 实现 IBM 团队在其文章中报告的性能期间Hyperledger Fabric 用于许可区块链的分布式操作系统 https arxiv org abs 1801 10228 我遇到了一些问题
  • 寻找跨平台开发的最佳 PCL 配置文件

    我正在努力扩展我的应用程序支持的平台数量 它曾经支持 NET4 Windows Store Windows Phone 但我希望也涵盖适用于 Android 和 iOS 的 Mono 我已将所有业务逻辑 模型和视图模型放入可移植类库 PCL