CF 2.0 List <t> .Sort </t>上的MethodAccessException

时间:2008-11-21 07:58:49

标签: c# .net compact-framework

我有一些library code适用于一系列.NET运行时(常规,CF,Silverlight等) - 但是一小段代码在CF上打破 2.0,MethodAccessException。我很确定这是一个运行时错误,但有没有人知道任何好的解决方法?它在CF 3.5中运行良好,但我也需要能够支持CF 2.0。

具体而言,这涉及使用泛型的库程序集,由调用者给予非公开T。我不会对T做任何讨厌的事情(例如反射),但无论如何它都会破坏......

它所做的就是包装值并将它们添加到列表中, 然后通过Comparison<>对列表进行排序。我也试过Array.SortIComparer<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; }
}

2 个答案:

答案 0 :(得分:2)

你是否尝试过编写自己的类型 - 也许内置的是做一些反思的恶作剧......不是为了长期使用你自己的 - 而是作为调试问题的一种手段。应该快速编写其他内容,至少可以看到它们是什么。

我认为你在繁荣时不会得到堆栈跟踪。

答案 1 :(得分:0)

我记得有时会遇到麻烦,以确保正确的dotNET内容在目标设备上。这是在dotNET CF 1.0天。这可能仍然是问题吗?