C#利用反射動態調用DLL並返回結果,和獲取程序集的信息


反射的基本概念: .Net Framework 中提供了反射機制,可以再加載程序運行時,動態獲取和加載程序集,並且可以獲取到程序集的信息

創建Assembly和Entity兩個程序集,在Assembly中添加Entity引用,如下圖:

namespace Entity
{
    public class GetData
    {
        public static SIMPEntities SIMP = new SIMPEntities();

        /// <summary>
        /// 查詢方法--返回序列化json
        /// </summary> 
        /// <returns></returns>
        public string GetResule()
        { 
            JavaScriptSerializer Serialize = new JavaScriptSerializer(); 
            var list = SIMP.Sys_Employee
                .Select(a => new { id = a.EmpId, EmpName = a.EmpName, PositionName = (a.Sys_Position!=null)?a.Sys_Position.PositionName:"" })
                .ToList(); 
            return Serialize.Serialize(list);  
        } 
    }
}
namespace AssemblyTest
{
    class Program
    {
        private static Program pro = new Program(); 
        static void Main(string[] args)
        { 
            pro.GetAssemblyInfo();

            pro.LoadAssembly();  
            Console.ReadLine();
        } 
        /// <summary>
        /// 動態讀取DLL,執行其中的方法
        /// </summary>
        public void LoadAssembly()
        {
            //DLL所在的絕對路徑 
            Assembly assembly = Assembly.LoadFrom(AppDomain.CurrentDomain.BaseDirectory + "Entity.dll");
            //注意寫法:程序集.類名  
            Type type = assembly.GetType("Entity.GetData");
            //獲取類中的公共方法GetResule                                              
            MethodInfo methed = type.GetMethod("GetResule"); 
            //創建對象的實例
            object instance = System.Activator.CreateInstance(type);
            //執行方法  new object[]為方法中的參數
            object result = methed.Invoke(instance, new object[] { });
        } 
        /// <summary>
        /// //獲取程序集信息
        /// </summary>
        public void GetAssemblyInfo()
        {
            Type type = typeof(Program);
            Assembly assembly = Assembly.GetExecutingAssembly();
            Console.WriteLine("命名空間:{0}", type.Namespace);
            Console.WriteLine("程序集:{0}", type.Assembly);
            Console.WriteLine("類的名字{0}", type.Name);
            Console.WriteLine("類的全部名字{0}", type.FullName);
            Console.WriteLine("基類:{0}", type.BaseType);
            Console.WriteLine("----------------------------");
            Console.WriteLine("程序集的名稱:{0}", assembly.GetName());
            Console.WriteLine("程序集的全名:{0}", assembly.FullName);
            Console.WriteLine("程序集的版本:{0}", assembly.GetName().Version);
            Console.WriteLine("程序集的位置:{0}", assembly.Location);
            Console.WriteLine("程序集所在目錄:{0}", AppDomain.CurrentDomain.BaseDirectory);
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM