8

自分のコードから .net 実行可能ファイルの関数を呼び出したい。私はリフレクターを使用し、これを見ました:

namespace TheExe.Core
{
    internal static class AssemblyInfo
    internal static class StringExtensionMethods
}

名前空間の TheExe.Core は、私が興味を持っている関数です。

internal static class StringExtensionMethods
{
    // Methods
    public static string Hash(this string original, string password);
    // More methods...
}

このコードを使用すると、ハッシュ メソッドを確認できますが、どのように呼び出すのですか?

Assembly ass = Assembly.LoadFile("TheExe");
Type asmType = ass.GetType("TheExe.Core.StringExtensionMethods");
MethodInfo mi = asmType.GetMethod("Hash", BindingFlags.Public | BindingFlags.Static);
string[] parameters = { "blabla", "MyPassword" };

// This line gives System.Reflection.TargetParameterCountException
// and how to cast the result to string ?
mi.Invoke(null, new Object[] {parameters});
4

2 に答える 2

9

現在のコードで文字列の配列を単一のパラメーターとして渡します。

string[]に強制変換できるので、配列をにobject[]渡すことができます。parametersInvoke

string result = (string)mi.Invoke(null, parameters);
于 2012-08-21T20:38:05.213 に答える
3

テスト目的でこれが必要な場合は、InternalsVisibleTo 属性の使用を検討してください。このようにして、テスト アセンブリをメイン アセンブリの「フレンド」にして、内部メソッド/クラスを呼び出すことができます。

制御アセンブリがない (または署名できない) 場合、必要に応じてリフレクションを使用する方法があります。サード パーティのアセンブリの内部メソッドを呼び出すことは、そのアセンブリが何らかの形で変更されたときに頭痛の種になる良い方法です。

于 2012-08-21T20:46:45.220 に答える