System.OutOfMemoryException при объединении Newtonsoft.Json - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю плагин для вызова веб-службы.Мне нужно сериализовать и десериализовать объект Json.Итак, мне нужен Newtonsoft.Json.Я пытаюсь объединить dll из NewtonSoft.Json и dll моего приложения, используя ILMerge.MSBuild.Task и ILMerge в Visual Studio 2015.

Я получаю ошибку ниже: enter image description here

Я искал решение в интернете, но не смог найти никакого решения.

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Мне удалось решить эту проблему, взяв последнюю версию dll из nuget, и просто положив ее в боковую папку и указав ссылку на dll.

Я не уверен, почему nuget испортил ее, но после того, как я взялNuget вне изображения сборки работал.

Мне не нравится тот факт, что я не могу использовать Nuget для получения обновлений для этого проекта, но, как минимум, он работает.

0 голосов
/ 20 декабря 2018

Для ILMerge в VisualStudio Использовать необходимые библиотеки только из диспетчера пакетов NuGet

Я использовал MSBuild.ILMerge.Task 1.0.5 и последнюю версию Newtonsoft.Json и получение такого типа проблемы.

Я попытался использовать стабильную версию путем понижения до Newtonsoft.Json версии 10.0.3 , и она хорошо работает.

Надеюсьэто помогает !!!

0 голосов
/ 04 декабря 2018

Если вы используете ILMerge только для сериализации / десериализации JSON, я бы рекомендовал удалить его и использовать класс DataContractJsonSerializer.Это изменение устранит зависимость с Newtonsoft.Json и ILMerge ( не поддерживается ), чтобы в итоге появилась библиотека более легких плагинов (что всегда хорошо):

// 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;  
} 

Полный пример может бытьнайдено здесь .

...