0

我正在尝试从 .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 调用时,将引发 InvalidProgramException。我可以从常规的 .NET 2.0 控制台应用程序测试工具中进行此调用,但在 .NET 2.0 CF 中它会抛出。

到底是怎么回事?

4

2 回答 2

2

您不能引用SqlMembershipProvider来自 Compact Framework 项目的程序集 (System.Web.dll)。据我所知,这种类型在 Compact Framework 中不可用。

您可能会遇到异常,因为您正在加载包含 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(或反射)。

于 2011-09-23T19:59:25.310 回答
0

尝试使用 new Type[0] 而不是 new Type[]

于 2011-09-23T19:36:15.093 回答