问题:
程序引用了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去加载而导致的找不到依赖项的错误