0

Compact Framework 2.0でLinqBridgeを使用しようとしていますが、Linq Whereメソッドが呼び出されたときにMethodAccessExceptionが発生します。LinqBridgeを使用するとMethodAccessExceptionが発生する

最初に私はBitBucketのコンパイル済みアセンブリを使用してみました。CFのコンパイルにはマイナーなtweeksを、gitHubにはsdf repoのctackeのフォークをフォークしました。

私は、ビルド間のクリーニングと、デバイス上のデプロイメントディレクトリのクリーニングに注意しました。また、DotPeekを使用して逆コンパイルして、LinqBridge内のすべてのものが公開されていることを公開していることを確認しました。両方を使用

私は次のコードを使用し、それはコンパクトなフレームワーク2.0を使用して実行したとき、次のコードは、MethodAccessExceptionがスロー2

微細

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) 
{ 
    foreach (TSource source1 in source) 
    { 
     if (predicate(source1)) 
      yield return source1; 
    } 
} 

更新を働いていた更新前1

(コンパイルしたFamework 3.5(System.Coreの代わりにLinqBridgeを使用)、またはFull Framework 2.0のではなく、です。だから私はこれがCompact Framework 2.0 CLRのバグだと思う。

using System.Linq; 
static class Program 
{ 
    private enum Something { a, b, c }; 

    [MTAThread] 
    static void Main() 
    { 
     var dict = new Dictionary<Something, Something>(); 
     dict.Add(Something.a, Something.a); 
     dict.RemoveByValue(Something.a); 
    } 
} 

public static class DictionaryExtentions 
{ 
    public static void RemoveByValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TValue value) 
    { 
     foreach (var item in dict.Where(kvp => kvp.Value.Equals(value)).ToArray()) 
     { 
      dict.Remove(item.Key); 
     } 
    } 
} 
+0

奇数先週、CF 2.0プロジェクトのためにLINQBridgeソースを自前のSDFに引っ張ったところ、うまくいきました。あなたのことをそれに照らしてチェックする仕事かもしれません。 https://github.com/ctacke/sdf – ctacke

+0

最新情報を見るまれにしか起こらないようですが、CLRのバグかもしれません。 – bit2know

答えて

0

問題は、Where呼び出しでTSourceとしてプライベートタイプを使用しているために発生しているようです。これは私の理解度を少し上回っていますが、ラムダをラップするために使用される表示クラスとして知られるコンパイラ生成コードが原因である可能性があります。 誰でもこのことをよく理解している場合は、回答を投稿してください。

関連する問題