博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#如何加载程序运行目录外的程序集
阅读量:7071 次
发布时间:2019-06-28

本文共 1665 字,大约阅读时间需要 5 分钟。

  我们的应用程序部署的时候,目录结构一般不会只有运行程序的目录这一个,我们可能在运行目录下建子目录,也可能使用System32目录,也可能使用其它第三方的程序集。.Net程序集

首先会在GAC中搜索相应的版本,如果未找到则会应用程序配置文件中找(如果配置),最后到应用程序所在的路径搜索。

  如何可以将程序集部署的运行目录的子目录, 在app.config添加以下配置,其中probing的privatePath就是配置当前程序搜索的子目录

... ...

当然我们也可以更详细的配置,不过似乎一般这么用的很少,这里可以指定程序集名称、公钥、文化,版本重定向等等信息

Msdn地址:

  如何加载非运行目录的程序集?也许有的人会想到反射,的确对应单独的一个程序集我们可以直接调用使用 Assembly.LoadFile(@"XXX.dll");加载,再使用反射对其中的方法属性进行调

用,但是如果这个程序集同时引用了其它的,非应用程序运行目录下的程序集,这时就会出错,这个问题该如何解决呢?

  我曾尝试用 Assembly.LoadFile(@"XXX.dll");加载那些依赖的程序集,但是没有成功,调用继续出错。使用 AppDomain.CurrentDomain.GetAssemblies()查看,所有的应用程序集都已经加载到了当前应用程序域,但是为什么还是找不到依赖的哪些程序集呢?后来查询未果,希望有高人能回答下。

最后使用了AppDomain.CurrentDomain.AssemblyResolve事件解决了以上问题,希望遇到同样问题的同学们少走弯路,在程序初始化的时候添加监听事件

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

在监听的事件中遇到要加载额外的dll的时候,返回 Assembly.LoadFrom(strTempAssmbPath)即可

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)        {            var strTempAssmbPath = "";            if ("qrcsharp" == args.Name.Substring(0, args.Name.IndexOf(",")))            {                var systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System);                strTempAssmbPath = System.IO.Path.Combine(systemFolder, "qrcsharp.dll");            }            return string.IsNullOrWhiteSpace(strTempAssmbPath) ? null : Assembly.LoadFrom(strTempAssmbPath);        }

 

 

转载于:https://www.cnblogs.com/guanglin/p/3200989.html

你可能感兴趣的文章
【Dalston】【第六章】API服务网关(Zuul) 下
查看>>
Windows上SSH服务器的配置以及客户端的连接
查看>>
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
查看>>
I.MX6 android 4.2 源码下载
查看>>
md5sum 生成 经md5加密后的字符串
查看>>
PowerShell应用之-批量执行SQL脚本
查看>>
职场加薪步步高升的五大法则
查看>>
增删主键及修改表名
查看>>
Gson库使用-排序字段(ExclusionStrategy)或者修改(FieldNamingStrategy)字段
查看>>
[医疗]DICOM VR数据类型表
查看>>
把原来可空的列变成主键
查看>>
shell 中的不相等怎么表达?大于、小于又怎么表达?
查看>>
WIF基本原理(4)联合身份验证实例
查看>>
HDFS写入和读取流程
查看>>
ScrollView 简单出错
查看>>
[置顶] VC++界面编程之--自定义CEdit(编辑框)皮肤
查看>>
动画渐变兼容各个浏览器
查看>>
java中有关线程的题目
查看>>
Oracle Minus 取差集
查看>>
mvc和三层架构到底有什么区别
查看>>