.net核心3,如何从外部程序集(dll)按名称加载和调用外部方法
是否可以在只知道方法名称的情况下从加载的文件程序集运行方法 我可以扫描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)
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);}