簡體   English   中英

.net Core 3 , 如何從外部程序集 (dll) 按名稱加載和調用外部方法

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM