欢迎光临
我的个人博客网站

动态加载及调用程序集

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;         }
赞(0) 打赏
未经允许不得转载:张拓的天空 » 动态加载及调用程序集
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏