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);
}
}
}
奇数先週、CF 2.0プロジェクトのためにLINQBridgeソースを自前のSDFに引っ張ったところ、うまくいきました。あなたのことをそれに照らしてチェックする仕事かもしれません。 https://github.com/ctacke/sdf – ctacke
最新情報を見るまれにしか起こらないようですが、CLRのバグかもしれません。 – bit2know