从另一个可执行文件调用一个内部类内部的功能(Calling an function inside a

2019-07-31 03:24发布

我想从我自己的代码中调用.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});

Answer 1:

您传递一个字符串数组作为与您当前密码的参数。

由于string[]可以强制转换为object[]可以只传递parameters数组Invoke

string result = (string)mi.Invoke(null, parameters);


Answer 2:

如果你需要这个测试的目的考虑使用InternalsVisibleTo属性。 这样,你可以让你的测试组件是主要部件的“朋友”,并调用内部方法/类。

如果你没有控制(或无法登录)组件 - 反射是这样做,如果你要的方式。 调用的第三方组件的内部方法是头疼时组件形式的任何形状变化的好方法。



文章来源: Calling an function inside an internal class from an another executable