0

我想從.NET 2.0 CF應用程序加載.NET程序集。我想有三個PARAMS調用內部的方法,像這樣:.NET Compact Framework反射調用.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中它會拋出。

這是怎麼回事?採用新型

回答

0

嘗試[0],而不是新類型[]

+0

'new Type [0]'和'new Type [] {}'之間沒有區別(在這種情況下)。 – vcsjones

+0

感謝您的建議,但不幸的是沒有什麼區別。 – Oneibus

2

您不能引用組件(System.Web.dll中),其中包含SqlMembershipProvider從Compact Framework的項目。據我所知,這種類型在Compact Framework中不可用。

您可能會遇到異常,因爲您正在加載包含IL的Compact Framework Runtime無法理解的程序集。

然而,這是相當簡單的,重新寫什麼GenerateSalt做自己,緊湊架構應該具有的一切需要,使其工作:

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

無需使用SqlMembershipProvider的(或反射)在所有。