一个DLL加载顺序的测试

    问题:

程序引用了rhinocommon.dll,编译没有问题,但是一旦运行就出现未能加载rhinocommon文件或程序集的错误。

    /// <summary>
        /// 测试三种情况
        /// 1、直接调用Line,看能否正常运行
        /// 2、因使用line导致引用的dll先加载,再引用本地的dll,查看dll版本是否更迭
        /// 3、直接加载本地的dll后再调用line,查看是否会有dll的更迭
        /// </summary>

1、

2、

3、

 三连,意味着运行时会先检测用到了哪些dll,然后依次加载,这三个都是用到了line,编译会注明需要运行时先加载rhino,而clr去加载rhinocommon时又因为其依赖项找不到而出错。

所以之前使用rhinoinside的关键意义是给AppDomain.CurrentDomain.AssemblyResolve挂载上加载rhino相关dll的事件,当出现解析失败时开始加载本机安装的rhino相关dll,而此时是在rhino的安装目录下进行loadfrom,dll很齐全,不会出现依赖项不足的问题

所以想规避这个问题,需要让编译器不把运行即加载rhinocommon写在dll的pe里(这一句随着认知的扩充会更改),即不能让在编译时即认定一定会使用rhinocommon里东西,而是让其运行后动态加载(将使用rhino库的操作全部放入某一个类中,通过接口注入到容器中,运行时取接口来得到调用rhinodll的接口实现),而真正运行后因为先使用了rhinoinside去加载本机的rhino的dll,而规避掉了后面使用rhinocommon库时的根据引用的nuget包里的单个rhinocommon的dll去加载而导致的找不到依赖项的错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值