.net核心3,如何从外部程序集(dll)按名称加载和调用外部方法

.net核心3,如何从外部程序集(dll)按名称加载和调用外部方法,.net,dll,.net-core,.net-assembly,invoke,.net,Dll,.net Core,.net Assembly,Invoke,是否可以在只知道方法名称的情况下从加载的文件程序集运行方法 我可以扫描dll并获得所有类及其方法;我想运行一个以特定前缀开头的方法,如exe\u myMethod 我应该先得到所需参数的列表吗? 有什么想法吗?谢谢大家! var myAssembly=AssemblyLoadContext.Default.LoadFromAssemblyPath(文件名); Type[]types=myAssembly.GetTypes(); foreach(类型中的类型t) { 如果(t.IsPublic)

是否可以在只知道方法名称的情况下从加载的文件程序集运行方法

我可以扫描dll并获得所有类及其方法;我想运行一个以特定前缀开头的方法,如
exe\u myMethod
我应该先得到所需参数的列表吗? 有什么想法吗?谢谢大家!

var myAssembly=AssemblyLoadContext.Default.LoadFromAssemblyPath(文件名);
Type[]types=myAssembly.GetTypes();
foreach(类型中的类型t)
{
如果(t.IsPublic)
{
动态myInstance=Activator.CreateInstance(t);
MemberInfo[]methodName=t.GetMethods();
foreach(methodName中的MemberInfo方法)
{
if(方法.ReflectedType.IsPublic)
{
//调用方法-如何调用?
}
}
}
}
抱歉,如果这是一个愚蠢的问题!:)

谢谢你的帮助。 结果如下

            var myAssembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(fileName);
            Type[] types = myAssembly.GetTypes();
            foreach (Type t in types)
            {
                if (t.IsPublic)
                {
                    dynamic myInstance = Activator.CreateInstance(t);
                    MemberInfo[] methodName = t.GetMethods();
                    foreach (MemberInfo method in methodName)
                    {
                        if (method.ReflectedType.IsPublic)
                        {
                            string mName  = method.Name.ToString();
                            var methodInfo = t.GetMethod(mName);
                            if (methodInfo != null) 
                            {
                                var o = Activator.CreateInstance(t);
                                ParameterInfo[] pars = methodInfo.GetParameters();
                                if (pars.Length == 0) // if there is no parameters
                                {
                                    var result = methodInfo.Invoke(o, null);
                                }
                                else 
                                {
                                    object[] MyParameters = new object[] { "parameter" }; 
                                    var result = methodInfo.Invoke(o, MyParameters);
                                }
                            }

                        }
                    }
                }

            }

MethodInfo
有一个
Invoke
方法。看起来应该是这样的:var MethodInfo=t.GetMethod(mName);如果(methodInfo!=null){var o=Activator.CreateInstance(t);var result=methodInfo.Invoke(o,null);}