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;
            }
  • 相关阅读:
    再谈iframe自适应高度
    一个软件外包老鸟对外包业的反思
    需求分析中减少客户摩擦的若干法则
    C# 进制转换
    'filter' is not a known css property name
    Ajax之ModalPopupExtender 的后台调用
    Microsoft SQL Server 中的小数数据类型
    ExtJS Combobox 如何设置默认和取值问题
    wp7 控制控件显隐
    wp7 MediaElement播放
  • 原文地址:https://www.cnblogs.com/hdl217/p/14281532.html
Copyright © 2011-2022 走看看