无法在dll中调用内部方法

时间:2015-12-27 00:13:45

标签: c# dll reflection

我在ddl文件中有这个类:

namespace A
{
    internal class PW
    {
        static PW()
        {
            //code
        }

        internal static string G(int num)
        {
            //more code
        }
    }
}

但是,当我这样称呼时:

using System;
using System.Reflection;

namespace PW_tester
{
    public class Program
    {
        static void Main(string[] args)
        { 
            MethodInfo method = typeof (PW).GetMethod("G", BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.NonPublic, null, new Type[] {typeof(int)}, null);     
        }
    }
}

我得到null作为方法变量的值。 那是我的整个计划。

项目中引用了dll文件,找到了PW类。

我知道我不能用

调用它
A.PW.G(0);

但是我将无法访问内部类/方法错误,这至少证明程序知道它的存在。

如何调用G方法?

2 个答案:

答案 0 :(得分:0)

您的方法采用int参数,而不是string

试试这个:

var method = typeof(PW).GetMethod(
    "G",
    BindingFlags.FlattenHierarchy | BindingFlags.Static | BindingFlags.NonPublic,
    null,
    new Type[] { typeof(int) }, //parameter is of type int
    null);

这将获得一个显示方法类型信息的MethodInfo。以下是如何使用它来调用方法:

var result = (string)method.Invoke(null, new object[] {5}); //pass 5 as the int parameter

答案 1 :(得分:0)

internal类不能反映在AppDomain之外。

结果如下:

scr

参考:https://msdn.microsoft.com/en-us/library/ha94aebs.aspx

编辑1

我能够通过手动加载程序集来实现它:

class Program
{
    static void Main(string[] args)
    {            
        var asy = Assembly.LoadFrom(@"<path>\A.dll");
        var pw = asy.GetTypes()[0];
        var method = pw.GetMethod("G", BindingFlags.NonPublic|BindingFlags.Static);
    }
}
相关问题