工厂模式 Assembly.Load(path).CreateInstance 出错解决方法

来源:互联网 发布:乐视tv网络电视播放器 编辑:程序博客网 时间:2024/05/18 02:10

记得之前我第一次从PetShop上学了这个反射机制,试着使用它时,也遇到过未能加载:

 

未能加载文件或程序集“XXXX.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件

 

这种错误提示,后来我也不清楚自己是怎么弄好了的。 -_-!!

 

 

因为平时项目小,不怎么需要用到反射机制,所以好长时间内不再理会它了,

 

 

今天,自己弄一个项目,又用到了它,结果还是同样的错误:未能加载文件或程序集“XXXX.SQLServerDAL”或它的某一个依赖项。系统找不到指定的文件

 

一火,就决心解决这个问题,花了一个上午的时间到网上找一堆的解决办法,结果都不行,可能是我的开发工具本身的问题也说不定。 -_-!!

 

 

现在我在这里写出我的解决办法来,如果哪位朋友遇到这个问题,又试过其它的办法,还是没有解决的话,不防试下我的这个办法,幸运的话,就能通过哦。 *O*

 

方法是:

 

首先,确保你的各类库之间的互相引用(包括using相应的名字空间)成功,这点我相信大家都不会出错的,如果是,就只能说是细心不够,因为这些是低级错误。然后各个类库手动重新生成一遍,记住,每个都要重新生成一次!

 

再次,你的web(网站项目)里的Bin文件夹,必须全部引用整个解决方案里的“所有类库”,像我,习惯性地只引用BLL和Model层,就惨!记住,你要用反射机制,就要引用所有类库,至于你在表示层里不想用某些类库,你不必using相应的名字空间就行了,

 

其实无非就是怕各层次的类名有冲突,你大可用命名空间加类名的办法解决同名冲突问题;

 

好了,现在回归到主题上来!

 

然后,你引用完各类库后,按理VS。NET这工具会自动把那些类库的DLL全都搬进Bin文件夹里的,这时候,你可就要注意事项了:你手动地把VS。NET工具自动帮你添加的这些个DLL(也就是类库里的程序集,如果你引用一些其它第三方组件的DLL,可以不删除第三方的DLL)全部删除,记住,一定要干掉它们! 然后,你会看到Bin文件夹里空白的,没有DLL在里面(当然,如果是保留第三方DLL的话,有文件是肯定的),这时候,就让它这样,就让Bin文件夹这样子;

 

最后,咋们刚才删除了那些DLL,这时候要调试,肯定要想办法让它们添加进来对吧,OK,这时候,切换到启动页面,一般为网站主页,然后按“F5”,也就是启动调试。之后,你再测试一下,上面那个未能加载的问题是否已完美解决了? 祝你好运!

 

 

*O*  如果问题解决了,我们返回去查检Bin文件夹,你会发现,文件夹里又自动添加了所有引用到的类库的DLL。

 

哈,看,VS。NET工具就是这么强悍,你就算删除了所有DLL,它还是有能力在你启动调试时帮你再次加进来,而且是再次加进来的DLL,绝对是没有错误的,放心吧。

 

注:只要上面问题通过一次这样的办法解决就成了,之后的,你怎么弄都行,不会再出现同样的问题了,除非你的人品差些,呵呵。