.NET Compact Framework Отражение вызова внутреннего метода в классе .NET Framework - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь загрузить сборку .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 ]

2 голосов
/ 23 сентября 2011

Нельзя ссылаться на сборку (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 голосов
/ 23 сентября 2011

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

...