4

LinqBridge .dllがマージされたJSON.NETを使用しています。LinqBridgeを使用すると、.NET 2からLinqにアクセスできます。インポートした後でも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にすでに含まれているため、この警告が表示されます。さらに、同じコンポーネントを2回含めましたが、これは非効率的です。

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ます。

JSON.NET dllからLinqにアクセスしたり、エラーメッセージを抑制したりすることはできますか?

4

1 に答える 1

6

LINQBridgeアセンブリでLINQクエリ演算子を提供するEnumerable静的クラスは、引き続きSystem.Linq名前空間で公開されます。

最初のエラーメッセージで指示されているように、System.Linqのusingディレクティブが必要です。

アップデート:

Newtonsoft.Json.Net20.dllにマージされたLINQBridgeアセンブリは、最初は気づかなかった「内部化」されていることがわかりました。これは、コンパイラが「クエリパターンを実装する」ために必要なEnumerable型をコードが参照できないことを意味します。したがって、LINQBridgeアセンブリを自分で参照する必要がありますが、そうすると、前述のように定義が重複しているという警告が表示されます。

プロジェクトプロパティの[ビルド]タブに移動し、[警告の抑制:]ボックスに「1685」と入力すると、重複クラスの警告を無効にできます。

しかし、おそらくより良いのは、LINQBridgeにマージせずにソースから独自のバージョンのJSON.netを構築することです。

于 2011-07-22T19:09:01.500 に答える