Compact Framework 2.0에서 LinqBridge를 사용하려고하지만 Linq Where
메서드가 호출 될 때 MethodAccessException이 발생합니다.LinqBridge를 사용할 때 MethodAccessException이 발생합니다.
처음에는 BitBucket의 사전 컴파일 된 어셈블리를 사용하려고했지만, CF를 위해 컴파일 할 때 약간의 트위크가있는 자신의 포크와 gitHub의 sdf 레포에서 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
(raboof 및 ctacke의 포크에서 미리 컴파일 된 dll)이지만 은 Compact 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);
}
}
}
Odd. 지난 주 CF 2.0 프로젝트에서 LINQBridge 소스를 SDF로 가져 와서 정상적으로 작동했습니다. 네가 그 일에 대해 검사 할 수도 있겠지. https://github.com/ctacke/sdf – ctacke
내 업데이트보기. 희소 한 상황에서만 발생하는 것으로 보이지만 CLR의 버그 일 수 있습니다. – bit2know