zoukankan      html  css  js  c++  java
  • 动态加载及调用程序集


    static DbCmd()
            {
                AppDomain currentDomain = AppDomain.CurrentDomain;
                currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
    
            }
            static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
            {
                string strFielName = args.Name.Split(',')[0];
                if (strFielName.ToLower().EndsWith(".resources"))  //不处理资源文件
                    return null;
                ExtMethod.WriteLog("DbCmd 程序集获取失败,准备动态加载:" + args.Name);
                string parentRoot = AppDomain.CurrentDomain.BaseDirectory;
                string dllName = GetDllOrExeName(parentRoot, strFielName);
                if (dllName == "")
                {
                    parentRoot = System.IO.Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory.TrimEnd('\'));
                    dllName = GetDllOrExeName(parentRoot, strFielName);
                }
                if (dllName != null)
                {
                    ExtMethod.WriteLog("DbCmd 程序集开始加载文件:" + dllName);
                    return Assembly.LoadFile(dllName);
                }
                else
                {
                    ExtMethod.WriteLog("DbCmd 程序集获取失败:找不到文件" + strFielName);
                }
                return null;
            }
            /// <summary>
            /// 获取指定名称的dll路径
            /// </summary>
            /// <param name="_DirectoryName">目录路径</param>
            /// <param name="_assemablName">程序集名称</param>
            /// <returns>返回路径名称</returns>
            static string GetDllOrExeName(string _DirectoryName, string _assemablName)
            {
                string filter = _assemablName + ".???";
                var subFiles = System.IO.Directory.GetFiles(_DirectoryName, filter, System.IO.SearchOption.AllDirectories);
                string dllName = "";
                foreach (var item in subFiles) //搜索下级目录
                {
                    if (item.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
                    {
                        dllName = item;
                        break;
                    }
                    if (item.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
                    {
                        dllName = item;
                        break;
                    }
                }
                return dllName;
            }
  • 相关阅读:
    Spark中文指南(入门篇)-Spark编程模型(一)
    Scala入门学习笔记三--数组使用
    沃老师学生的成绩
    Codeforces Round #461 (Div. 2) DRobot Vacuum Cleaner
    Codeforces Round #461 (Div. 2) ABC
    Educational Codeforces Round 37 (Rated for Div. 2) ABC
    Codeforces Round #460 (Div. 2) D Substring
    Codeforces Round #460 (Div. 2) ABC
    中缀式转后缀式求表达式结果
    计算器——python正则表达式
  • 原文地址:https://www.cnblogs.com/hdl217/p/14281532.html
Copyright © 2011-2022 走看看