尝试创建特定于平台的protobuf-net序列化程序,其中预编译来自PCL中的类型

时间:2015-08-28 23:45:28

标签: c# .net xamarin protobuf-net portable-class-library

我正在开发一个跨平台的.NET项目(桌面和Xamarin),它广泛使用protobuf-net和预编译工具。我正在努力想出一种理智的方法来自动化和构建protobuf代码,这样就可以在没有复制粘贴的情况下共享通过线路的DTO,因此可以轻松地重新生成序列化程序以响应代码更改。 / p>

以下是我目前设置的简化版本:

  • PCLDTO:包含标有ProtoContract的DTO的便携式类库,这些将被序列化。还与ASP.NET后端共享。
  • .Net45.DTO.Lib
  • Xam.Droid.DTO.Lib
  • Xam.iOS.DTO.Lib:这个及以上2个是特定于框架的图书馆项目,PCLDTO的内容与文件相关联。
  • PBCompiler:在上述3个项目的输出中运行预编译的控制台应用
  • PCLAppCore:与PCLDTO的DTO交互的业务逻辑,并且(de)使用PBCompiler生成的包装和注入的序列化器对它们进行序列化。
  • Xam.Droid.App
  • Xam.iOS.App
  • .Net45.App:此及以上2是最终应用。他们引用PBCompiler生成的特定于平台的序列化程序,然后将它们包装并注入PCLAppCore。

此设置的问题是生成的序列化程序需要来自Xam.iOS.DTO.Lib等的DTO而不是PCLDTO,我不能在应用程序中引用这些库,因为它们会与PCLDTO中的类型冲突(相同)文件链接在),因为这些程序集不是PCL兼容的。我最初考虑过在这里使用类型转发,但是当我开始深入研究它时,很明显类型转发不适用于这种方法。

所以,我的问题是 - 这个设置可以挽救吗?否则,是否有一种我可以忽视的替代方法?基本要求是让PCL持有DTO,从中可以使用protobuf-net生成特定于平台的protobuf-net序列化器,然后将其包装并注入其他PCL,并通过DTO引用PCL。

0 个答案:

没有答案