在UWP/.NET本机和iOS上的Protobuf-net



我有一个基于.NET标准1.4的Xamarin.Forms应用程序,该应用程序使用Protobuf-net将对象存储在数据库中,该对象将在以后发送到WCF服务。

在Android和UWP上"托管"一切都很好,但是 - 在搜索了无法访问的存储库,文章和博客文章之后,以及在尝试使预兼容工具工作的工具之后,但我有一个失败 - 我有一个简单(可能不是)问题:如何使Protobuf-net在UWP/.NET本机和iOS/Xamarin等"受限"环境中工作?

现在,我对这种情况没有很好的解决方案。我知道有些人已经使它起作用了,但是我在UWP/本地/iOS上还不够专业,无法为您提供可靠的"这是成功的途径"说明。

uwp/.net本机和iOS共享(如您所知)一个常见问题:缺乏完整的运行时发射。我了解为什么这是。只是:棘手。

从历史上看,Protobuf-net试图通过构建工具来解决此问题,该工具重复了通常在运行时进行的现有IL-EMIT(作为构建时间工具)。这是丑陋而讨厌的,但奏效。有点儿。为了围绕一些平台限制,Protobuf-net使用了一些IKVM工具来帮助解决此问题,但是随着.NET框架场景继续扩展,基本上是不可行的。另外:IKVM工具现在已被放弃并且不会被维护。

与此并行,研究了一些新概念的动力:

  • 用于异步IO来源的完整 async/await:请注意,这是极其不友好的IL发射,但在C#
  • 中几乎很容易实现
  • "管道"/"频道"/"流2" - 无论本周被称为什么;但是:新的无分配IO概念在Kestrel中使用(我在早期阶段就帮助了一下这个球,所以我熟悉需要做什么) - 请注意,这是 async/await
  • 当然:以上所有与生成前的关系

现在,我非常认为,前进的最佳途径是通过构建时间工具切换到发射c#的情况。我曾多次向MS请求改进的自动化C#基于Roslyn,但到目前为止:没有快乐(令人厌烦:ASP.NET的东西甚至具有完全工作的概念证明,但已被搁置了)。所以现在我在想:我们需要假设这不会发生,并且基本上是独立写的。这不一定是听起来很复杂的(以及各种形式的代码对我来说是非常熟悉的)。C#发射的优点是,我不需要与每个框架的复杂性进行战斗 - 我只需要编译它(显然,并且很明显)。

so:是什么让我退缩?理论上:什么都没有。我只需要写下这些东西。实际上:生活,时间等。我对每日影响我影响我的事情的优先级罪,现实是我并不是这些平台的日常用户,这意味着我不是感觉到您的痛苦。但是:我听到您的声音清晰而清晰,我正在努力提高应该解决这些观点的V3工作。我真的很想对那些事情有一个好故事 - 我的目的是通过转到C#emit模型(至少是前期):它可以帮助我如果它帮助我我知道这不会是我知道的阁楼/地下室中被遗忘的玩具,但是很难找到动力去寻找寻找的麻烦。

最新更新