我有一些 library code适用于一系列 .NET 运行时(常规、CF、Silverlight 等)- 但一小块代码仅 在 CF 2.0 上中断,带有 MethodAccessException
.我很确定这是一个运行时错误,但有人知道任何好的解决方法吗?它在 CF 3.5 中运行良好,但我也需要能够支持 CF 2.0。
具体来说,这与使用泛型的库程序集有关,被赋予一个非公开的 T
由来电者。我没有对 T
做任何令人讨厌的事情(比如反射),但它还是坏了……
它所做的只是包装值并将它们添加到列表中,
然后通过 Comparison<>
对列表进行排序.我也试过Array.Sort
,
IComparer<Wrapper<T>>
, IComparable<Wrapper<T>>
, 等等 - 所有
以同样的方式失败:MethodAccessException
-
使用 VS 提示:
If the access level of a method in a class library has changed, recompile any assemblies that reference that library.
但是制作T
public 并且一切正常...请注意,我们从未对 T
进行排序- 我们只使用 Wrapper<T>
...
感谢任何意见...
库组装:
public static class LibraryClass
{
public static void Test<T>(T foo, T bar)
{
// vastly simplified... I am aware that it is already in order here ;-p
var list = new List<Wrapper<T>>();
list.Add(new Wrapper<T> { Tag = 1, Value = foo });
list.Add(new Wrapper<T> { Tag = 2, Value = bar });
list.Sort((x,y) => x.Tag.CompareTo(y.Tag)); // BOOM!!
}
}
public class Wrapper<T> // public to prove this isn't a factor...
{
public T Value { get; set; }
public int Tag { get; set; }
}
调用程序集:
public static class Program
{
static void Main()
{
MyData foo = new MyData {Name = "foo"},
bar = new MyData {Name = "bar"};
LibraryClass.Test<MyData>(foo, bar);
}
}
class MyData // but make MyData public and it works...
{
public string Name { get; set; }
}
最佳答案
您是否尝试过编写您自己的排序 - 也许内置的排序正在做一些反射恶作剧...不是为了长期使用您自己的排序 - 而是作为调试问题的一种方式。用其他东西编写代码应该很快,至少可以看看是什么。
我想当它开始运行时你不会得到堆栈跟踪。
关于c# - CF 2.0 List<T>.Sort 上的 MethodAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/308154/