2011-07-11 93 views
4

我使用的JSON.NET其中合併了LinqBridge.dll。LinqBridge允許從.NET 2訪問Linq。如果我嘗試使用Linq,即使在導入System.Linq後,我也會收到以下內容錯誤:從JSON.NET訪問LinqBridge dll

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或抑制錯誤消息?

+0

您定位的是什麼版本的.NET框架?什麼版本的JSON.Net? –

+0

@Mike:JSON.NET 4.0和針對.NET 2 – Casebash

+0

我已經爲這種情況發佈了一個問題。我有同樣的問題,現在我決定不用LinqBridge.cs重新編譯Json.NET項目:https://github.com/JamesNK/Newtonsoft.Json/issues/8 –

回答

6

在LINQBridge程序集中提供LINQ查詢操作符的Enumerable靜態類仍在System.Linq命名空間中公開。

您仍然需要在第一條錯誤消息中指示System.Linq的using指令。

更新:

原來已經「內」,我並沒有在第一次注意到多數民衆贊成合併到Newtonsoft.Json.Net20.dll的LINQBridge組裝。這意味着您的代碼無法引用編譯器需要「實現查詢模式」的Enumerable類型。所以你必須自己引用LINQBridge程序集,但是你會提到關於重複定義的警告。

您可以通過轉到項目屬性的「構建」選項卡來禁用重複類警告,並在「取消警告:」框中輸入「1685」。

但是,如果沒有在LINQBridge中合併,從源代碼構建自己的JSON.net版本可能會更好。