[英].net Core 3 , How to load and invoke external a method by name from an external assembly (dll)
是否可以從加載的文件程序集中運行一個方法,只知道一個方法名稱?
我可以掃描 dll 並獲取所有類及其方法; 我想運行一個以特定前綴開頭的方法,比如exe_myMethod
我應該首先獲得所需參數的列表嗎? 有什么想法嗎 ? 謝謝 !
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)
{
// invoke method - How?
}
}
}
}
對不起,如果這是一個愚蠢的問題! :)
感謝您的幫助。 這是結果。
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);
}
}
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.