C#にて配列を引数に持つメソッドをInvokeMethodで呼ぶとMissingMethodExceptionが発生する

コンソールアプリケーションをまるごとテストしようとしたときに発生する(した)かもね




原因


https://msdn.microsoft.com/ja-jp/library/system.missingmethodexception(v=vs.110).aspx
エラーの意味は
存在しないメソッドに動的にアクセスしようとするとスローされる例外。
になります。
タイプミスの他に引数が間違っているケースが考えられます。



具体例と対処法


例えば以下のMainメソッドを呼び出す場合
class MyClass
{
    private static void Main(string[] args)
    {
        ...
    }
}



// NG
new PrivateType(typeof(MyClass)).InvokeStatic("Main", new string[] { "0" } );

// OK
new PrivateType(typeof(MyClass)).InvokeStatic("Main", new object[] { new string[] { "0" } });

理由はよくわかりませんがnew object[] { array } ってしないといけないみたいです。
いじょ

2015年9月7日月曜日