.NET Compact Framework Отражение вызова внутреннего метода в классе.NET Framework

Я пытаюсь загрузить сборку.NET из приложения.NET 2.0 CF. Я хочу вызвать внутренний метод с тремя параметрами, например, так:

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 он выдает.

Что здесь происходит?

2 ответа

Вы не можете ссылаться на сборку (System.Web.dll), которая содержит SqlMembershipProvider из проекта Compact Framework. Насколько я могу судить, этот тип недоступен в Compact Framework.

Вероятно, вы получаете исключение, потому что вы загружаете сборку, содержащую IL, которую не может понять среда выполнения Compact Framework.

Тем не менее, довольно просто переписать, что GenerateSalt делает самостоятельно, и компактная структура должна иметь все необходимое, чтобы она работала:

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

Нет необходимости использовать SqlMembershipProvider (или отражение) вообще.

Попробуйте использовать новый тип [0], а не новый тип []

Другие вопросы по тегам