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.dll
和protobuf-net.xml
,并使用Mono
调用我的程序。
我这里有遗漏吗?
听起来这里的主要问题是您的项目设置和构建过程。Visual Studio不以单声道为目标。如果你坚持使用较低级别的.net版本(2.0、3.0等),它通常只适用于,但随着版本的提高,它会变得更薄。
这里更典型的做法是使用不同的项目/构建来针对mono。这可以是命令行中的MonoDevelop、Xamarin或mcs
。有了这些工具,您应该能够正确地编译针对mono和可用框架版本的项目。
特别要注意的是,protobuf-net根本不使用LINQ,也不引用System.Core,因此负载异常与protobuf-net无关。最有可能的是,mono运行时根本无法识别您为测试项目配置的核心引用。