我有一些可在一系列 .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 提示:
如果类库中方法的访问级别已更改,请重新编译引用该库的所有程序集。
但是T
公开,一切都很好......请注意,我们从未分类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; }
}