protobuf-net + Mono + Linux

本文关键字:Linux Mono protobuf-net | 更新日期: 2023-09-27 18:26:15

我正在使用protobuf-net来序列化我的数据。在Windows下一切都很好,我使用Mono在Linux下运行示例项目,但似乎并不简单。

我收到以下错误:

程序集/home/***/Debug/Di3.dll中缺少Skip方法,类型为System.Linq.Enumerable未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集"System.Core,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"或其依赖项之一。

异常在以下行引发:

var instance = new ToSerializeClass();

该类定义为:

[ProtoContract]
public class ToSerializeClass
{
    internal ToSerializeClass()
    {// it seems that the protobuf net needs this constructor. 
    }
    [ProtoMember(1)]
    internal int omega { set; get; }
    [ProtoMember(2)]
    internal List<Lambda> lambda { set; get; }
}

我将调试/部署文件夹复制到linux,用为Mono发布的文件替换protobuf-net.dllprotobuf-net.xml,并使用Mono调用我的程序。

我这里有遗漏吗?

protobuf-net + Mono + Linux

听起来这里的主要问题是您的项目设置和构建过程。Visual Studio不以单声道为目标。如果你坚持使用较低级别的.net版本(2.0、3.0等),它通常只适用于,但随着版本的提高,它会变得更薄。

这里更典型的做法是使用不同的项目/构建来针对mono。这可以是命令行中的MonoDevelop、Xamarin或mcs。有了这些工具,您应该能够正确地编译针对mono和可用框架版本的项目。

特别要注意的是,protobuf-net根本不使用LINQ,也不引用System.Core,因此负载异常与protobuf-net无关。最有可能的是,mono运行时根本无法识别您为测试项目配置的核心引用。