System.OutOfMemoryException 合并时 Newtonsoft.Json

System.OutOfMemoryException when merging Newtonsoft.Json

我正在创建一个插件来调用网络服务。我需要序列化和反序列化 Json 对象。所以,我需要Newtonsoft.Json。我正在尝试在 Visual Studio 2015 中使用 ILMerge.MSBuild.Task 和 ILMerge 合并来自 NewtonSoft.Json 的 dll 和我的应用程序 dll。

我收到以下错误:

我在互联网上寻找解决方案,但找不到任何解决方案。

如果您仅将 ILMerge 用于 serialize/deserialize JSON,我建议您放弃它并改用 DataContractJsonSerializer class。此更改将删除与 Newtonsoft.Json 和 ILMerge (not supported) 的依赖关系,最终得到一个更轻便的插件库(这总是好的):

// Deserialize a JSON stream to a User object.  
public static User ReadToObject(string json)  
{  
    User deserializedUser = new User();  
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));  
    DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());  
    deserializedUser = ser.ReadObject(ms) as User;  
    ms.Close();  
    return deserializedUser;  
} 

可以找到完整示例 here

我能够通过从 nuget 获取最新的 dll 来解决这个问题,并将其放入侧文件夹并直接引用 dll。

我不确定为什么 nuget 会把它搞砸,但是在我从图片中删除 nuget 之后,构建工作正常。

我不喜欢我不能使用 nuget 来获取这个项目的更新,但至少它是有效的。

对于 VisualStudio 中的 ILMerge,仅使用来自 NuGet 包管理器的必要 dll

我正在使用 MSBuild.ILMerge.Task 1.0.5Newtonsoft.Json 的最新版本并获得此类型的问题。

我尝试通过降级到 Newtonsoft.Json 版本 10.0.3 来使用稳定版本并且它运行良好。

希望对您有所帮助!!!