0

.NET 2.0 CF アプリケーションから .NET アセンブリを読み込もうとしています。次のように、3 つのパラメーターを使用して内部メソッドを呼び出したいとします。

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

SqlMembershipProviderCompact 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[] ではなく new Type[0] を使用してみてください

于 2011-09-23T19:36:15.093 に答える