0

.NET 2.0 CF 응용 프로그램에서 .NET 어셈블리를로드하려고합니다. 나는과 같이 세 가지 PARAMS와 내부 메서드를 호출하려면 다음 getMethod 메소드 호출이 실행되면, InvalidProgramException가.NET Compact Framework .NET Framework 클래스의 내부 메서드에 대한 Reflection 호출

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[] {}); 

을 발생합니다. 일반 .NET 2.0 콘솔 응용 프로그램 테스트 장치에서이 호출을 만들 수 있지만 .NET 2.0 CF에서는이 호출이 throw됩니다.

무슨 일입니까? 새로운 유형을 사용하여

답변

0

시도 [0]이 아닌 새로운 유형 []

+0

'new Type [0]'과'new Type [] {}'사이에는 차이점이 없습니다 (이 경우). – vcsjones

+0

제안 해 주셔서 감사합니다.하지만 불행히도 차이는 없습니다. – Oneibus

2

당신은 어셈블리 컴팩트 프레임 워크 프로젝트에서 SqlMembershipProvider을 포함 (를 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 (또는 반사)를 사용 할 필요 모든.

관련 문제