我有一些图书馆代码可以在一系列的.NET运行时(常规的、CF的、Silverlight等)上工作--但是一小块代码正在用MethodAccessException
破坏CF2.0上的只使用。我很确定这是一个运行时错误,但是有谁知道什么好的解决办法吗?它在CF3.5中工作得很好,但我也需要能够支持CF2.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; }
}
发布于 2008-11-21 08:14:38
你试过写你自己的作品吗?也许里面的一个是在做一些反思性的恶作剧.这并不是为了长远地使用自己的问题,而是作为调试问题的一种手段。它应该能够快速地在其他东西中编码,并且至少能看到什么。
我想当它爆炸的时候你不会发现堆栈的痕迹。
发布于 2009-06-23 09:03:25
我记得有麻烦(有时),以确保正确的dotNET的东西在目标设备上。这是在dotNET CF 1.0天。这是否仍然是问题所在?
https://stackoverflow.com/questions/308154
复制相似问题