记载这篇文章的原因是我自己遇到了动态加载程序集的问题,而困扰了一天之久。
最终看到了这篇博客:http://www.cnblogs.com/brucebi/archive/2013/05/22/Assembly_Load.html?utm_source=tuicool&utm_medium=referral
但是不是直接看到的原文,而是在这里看到的:http://www.tuicool.com/articles/a2EN7j
具体是什么原因不能加载,我也不清楚,也不能描述清楚,说了,连我自己都不相信。
我的项目需求是,要做MVC的插件化,从网上找了很久,
找到了,http://www.cnblogs.com/cjnmy36723/p/3405272.html#3048029
找到了 https://github.com/shiningrise/Plugin.git
下载了项目,在人本来的项目中运行正常,而在我的项目中,运行是不对的。下面我描述为什么不对了。
按照项目介绍,插件能正常加载,而插件引用的程序集是不能加载的,就提示找不到,而且是FileNotFoundException,但是文件确实存在的,应该是没有把程序集加载到Domain当中。
非常郁闷。
被注视掉的部分,就是原来的,在原来的项目中是可以的,我还特地新建了个demo,也是可以的。
非常郁闷。
后来,在网上,我看到了
这两句
http://www.tuicool.com/articles/a2EN7j
LoadFile(string)
- Load和LoadFrom的行为那么复杂,而且加载的不一定就是我指定的程序集,如果我真的确定以及肯定就想加载某个程序集文件怎么办呢?这就是为什么会有LoadFile的原因了。其实,在.NET Framework 1.0中并没有LoadFile,因为有了前面提到的原因,才在.NET Framework 1.1中加入了LoadFile。
- 使用此方法加载的程序集的依赖项不会被自动加载,可以通过AppDomain.AssemblyResolve事件来处理相关程序集的加载。
- LoadFile把程序集加载到no context中,而且允许多个Identity相同但路径不同的程序集同时存在。
然后,把程序内替换成LoadFrom,奇迹般的正确了,而为什么正确了,我也不知道。
非常郁闷。
使用LoadFile的时候,原项目是正确的。而在我自己的项目中是不正确的。