我们的应用程序在Windows上使用 JSON.net 很好。在Linux上(我们正在Ubuntu中测试),我们得到一个异常:
An exception was thrown by the type initializer for Newtonsoft.Json.Utilities.ConvertUtils
20150310_11:51:37.404 ERROR : at Newtonsoft.Json.Serialization.DefaultContractResolver.IsJsonPrimitiveType(System.Type t)
at Newtonsoft.Json.Serialization.DefaultContractResolver.CreateContract(System.Type objectType)
at Newtonsoft.Json.Serialization.DefaultContractResolver.ResolveContract(System.Type type)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.GetContractSafe(System.Type type)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(Newtonsoft.Json.JsonReader reader, System.Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(Newtonsoft.Json.JsonReader reader, System.Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(Newtonsoft.Json.JsonReader reader, System.Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject(System.String value, Newtonsoft.Json.JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject(System.String value)
内部异常是
Could not load file or assembly 'System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
在网上的其他位置,他们说可能是我们需要安装"libmono-system-numerics4.0-cil",但 apt-get 显示已经安装了并且是最新的。
我们正在使用.NET 4.0(因为我们希望与Windows XP保持兼容,市场份额仍然很大)。
关于如何让它运行的任何想法?
无论出于何种原因,它只是不想与Linux上安装的版本合作,并且永远无法加载它。
以下是我所做的最终导致它运行的方法:
- 添加了对使用 JSON.net 的项目的 System.Numerics 引用
- 从Windows发行版中获取System.Numerics.dll(这可能是一个.NET程序集而不是Mono),并将其添加到我的构建过程中,这样System.Numerics.dll最终进入Linux项目的/bin/Release目录(与主应用程序的.exe目录相同)。