Доступ к LinqBridge из библиотеки JSON.NET - PullRequest
4 голосов
/ 11 июля 2011

Я использую JSON.NET , в котором объединена LinqBridge .dll. LinqBridge позволяет получать доступ к Linq из .NET 2. Если я пытаюсь использовать Linq, даже после импортируя System.Linq, я получаю следующую ошибку:

Error   13  Could not find an implementation of the query pattern for source type 'int[]'.  'Where' not found.  Are you missing a reference to 'System.Core.dll' or a using directive for 'System.Linq'?    C:\Users\chrisl\Desktop\SoftTokens\Windows Desktop Soft-Token\Program.cs    27  25  WindowsSoftToken

Если я пытаюсь включить LinqBridge, то, поскольку JSON.NET уже включает его, я получаю это предупреждение. Кроме того, я включил один и тот же компонент дважды, что неэффективно:

Warning 2   The predefined type 'System.Action' is defined in multiple assemblies in the global alias; using definition from 'c:\Users\chrisl\Desktop\SoftTokens\Windows Desktop Soft-Token\libs\Newtonsoft.Json.Net20.dll' WindowsSoftToken

Если я просматриваю Newtonsoft.Json.Net20 в браузере объектов, я вижу, что System.Linq выглядит пустым, даже после того, как я спал Show hidden types and methods.

Можно ли получить доступ к Linq из dll JSON.NET или подавить сообщения об ошибках?

1 Ответ

6 голосов
/ 22 июля 2011

Статический класс Enumerable, который предоставляет операторы запросов LINQ в сборке LINQBridge, по-прежнему доступен в пространстве имен System.Linq.

Вам по-прежнему необходимо иметь директиву using для System.Linq, как указано в первомсообщение об ошибке.

Обновление:

Оказывается, что сборка LINQBridge, объединенная с Newtonsoft.Json.Net20.dll, была "интернализована", чего я не заметилвначале.Это означает, что ваш код не может ссылаться на тип Enumerable, который необходим компилятору для «реализации шаблона запроса».Таким образом, вам нужно ссылаться на сборку LINQBridge самостоятельно, но затем вы получите предупреждение о дубликатах определений, как вы упомянули.

Вы можете отключить предупреждение о дублировании классов, перейдя на вкладку Build свойств вашего проекта и введите "1685 "в поле" Подавить предупреждения: ".

Но, вероятно, было бы лучше создать собственную версию JSON.net из исходного кода без объединения в LINQBridge.

...