4

我正在使用合并了LinqBridge .dll 的JSON.NET。LinqBridge允许从 .NET 2 访问 Linq。如果我尝试使用 Linq,即使在 importing 之后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 显示为空,即使在我选择了 slected 之后也是如此Show hidden types and methods

是否可以从 JSON.NET dll 访问 Linq 或抑制错误消息?

4

1 回答 1

6

在 LINQBridge 程序集中提供 LINQ 查询运算符的 Enumerable 静态类仍公开在 System.Linq 命名空间中。

您仍然需要按照第一条错误消息中的指示使用 System.Linq 指令。

更新:

事实证明,合并到 Newtonsoft.Json.Net20.dll 中的 LINQBridge 程序集已被“内部化”,我一开始并没有注意到。这意味着您的代码无法引用编译器“实现查询模式”所需的 Enumerable 类型。因此,您必须自己引用 LINQBridge 程序集,但随后您会收到有关重复定义的警告,如您所提到的。

您可以通过转到项目属性的“构建”选项卡并在“抑制警告:”框中输入“1685”来禁用重复类警告。

但可能更好的是从源代码构建您自己的 JSON.net 版本,而不在 LINQBridge 中合并。

于 2011-07-22T19:09:01.500 回答