Reflection .NET Compact Framework对.NET Framework类中内部方法的反射调用

Reflection .NET Compact Framework对.NET Framework类中内部方法的反射调用,reflection,compact-framework,.net-2.0,invalidprogramexception,Reflection,Compact Framework,.net 2.0,Invalidprogramexception,我正在尝试从.NET 2.0 CF应用程序加载.NET程序集。我想用三个参数调用一个内部方法,如下所示: var obj = new System.Web.Security.SqlMembershipProvider(); MethodInfo mi = obj.GetType().GetMethod("GenerateSalt", BindingFlags.NonPublic | BindingFlags.Instance,

我正在尝试从.NET 2.0 CF应用程序加载.NET程序集。我想用三个参数调用一个内部方法,如下所示:

var obj = new System.Web.Security.SqlMembershipProvider();

MethodInfo mi = obj.GetType().GetMethod("GenerateSalt", 
                    BindingFlags.NonPublic | BindingFlags.Instance,
                    null, new Type[] {}, null);

object resObj = mi.Invoke(obj, new object[] {});
执行GetMethod调用时,将抛出InvalidProgrameException。我可以通过常规的.NET2.0控制台应用程序测试工具进行此调用,但在.NET2.0cf中,它会抛出


发生了什么?

尝试使用新类型[0]而不是新类型[]

您无法从精简框架项目中引用包含
SqlMembershipProvider
的程序集(System.Web.dll)。据我所知,这种类型在紧凑型框架中是不可用的

您可能会遇到异常,因为您正在加载的程序集包含Compact Framework运行时无法理解的IL

但是,重新编写GenerateSalt自己的功能相当简单,紧凑型框架应该具备使其工作所需的一切:

public string GenerateSalt()
{
    byte[] data = new byte[0x10];
    new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(data);
    return System.Convert.ToBase64String(data);
}

根本不需要使用SqlMembershipProvider(或反射)。

新类型[0]和新类型[]{}之间(在本例中)没有区别。感谢您的建议,但不幸的是,is没有带来任何区别。