关闭

VB.Net未能加载文件或程序集“XXX”或它的某一个依赖项。

标签: 未将对象引用设置到对象的实例
544人阅读 评论(78) 收藏 举报
分类:

   在机房重构七层时,运行时出现如下错误,真是折磨了自己半天,网上查出很多办法,除了一种办法没使,其它的都试了,还是不行,其实在此期间,看到师哥的一篇博客,是有关这个问题的,但感觉有点看不懂,其实是自己没仔细看,一看到他那片博客关于这个问题,写了一篇,就给人一种很难的感觉,看到他那篇博客里面设计到很多文件夹感觉见都没见到过,所以就放弃了,但其实该文件夹就在自己建的项目里,自己没去点,就浪费了好多时间,最后还是用师哥的方法解决的。

问题出处

   首先该问题出现在反射的代码中,即 

Return CType(Assembly.Load(AssemblyName).CreateInstance(className), Login.IDAL.ISelectUserAccess)

问题原因:(此处看的师哥的博客)

1.文件名与加载时的DLL文件名不一致。
2:.DLL文件根本不存在,即出现丢失情况。

2:.DLL文件根本不存在,即出现丢失情况。

3.:加载DLL路径错误,即DLL文件存在,但加载路径不正确

解决方案:  

  首先确保自己的代码准确无误,主要是看参数是否正确

  即在该项目My Project即可找到对应的程序集名、命名空间


  下面熟悉一下什么事.dll文件:DLL是一种动态链接库文件,是一种不可执行文件,它本身是一个包含可由多个程序同时使用的代码和数据的库,(不是所以能运行的文件都叫可执行文件,有的可能是被执行,和一些程序绑定在一起,当你点击时运行,貌似看起来像是执行文件)。DLL有两种好处@1:可使进程可调用不属于其可执行代码的函数;@2:有助于共享数据和资源。

  确保参数正确后,发现U层bin文件夹下面的bebug文件夹下面除了没有D层的.dll文件,其它层的.all文件都有。从师哥的博客中得知:.net类加载的机制就是默认从本程序集的bin文件中找要加载的程序集的.dll文件,所以启动项目的bin文件夹下要有其它程序的.dll文件(本人在各个程序的bin文件夹下找,发现一个规律,就是你本程序引用了谁,在本程序的bin下面就有引用程序的.dll文件,包括间接引用的【即U层引用Facade层,Facade层引用B层,所以U层里有B层的.dll文件】,引用的机制是:在本程序集有变化时会自动拷贝.dll)。于是乎我就手动的把D层的.dll文件复制到了U层下面,此时该问题以解决,但一运行又出现了另一个错:

  刚才是我手动的把文件拖到另一个文件夹下的,此问题的解决办法是在D层的生成输出路径下,使用浏览把U层的.dll文件添加进去


  反射:提供一种编程的方式,在程序运行期可获得NET的组成部分的相关内容,机房收费系统用反射的目的就是:翻遍更换数据库

  这是在网上搜的一篇有关VB.NET的反射机制的理解:http://www.cnblogs.com/pangblog/archive/2013/08/22/3275579.html

  反射还在研究。。。

总结

  其实有时总是被问题吓倒了,就如一开始就搜到师哥的博客了,但没耐心看下去,就去搜别的方法了,结果可想而知,如果一开始我能耐心看下去,去我的文件夹下多点点,问题也就解决了。由此验证了老师的话:去做就行了,此问题要说去找就行了,也就是去做了。要想发现一个程序或应用的更多功能,去多点点就行了。如果你不想动脑袋,那你将会花费更多的时间。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22372次
    • 积分:3385
    • 等级:
    • 排名:第9953名
    • 原创:81篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1589条
    博客专栏
    C#

    文章:11篇

    阅读:2858
    文章分类
    最新评论