ASP.net Core 2.0 中引用了某个程序集,编译通过但运行时报dll not found

此问题仅出现在ASP.net Core 2.1以前的版本(引用项目的依赖项不递归加载)。2.1之后此BUG已修复。

一、问题产生
本来打算写个类似于记事本一样的东西,刚好以前写过一个MySQL的工具类,就直接引用了,项目的大概结构如下图。
大概结构
在网页项目里面引用了自己写的MySQLHelper工具包,这个包里面封装了所有网页中用到的数据库操作,因为是第一次用自己写的工具包所以没啥经验,虽然编译一下子就过去了,但是运行的时候却出现MySQL.Data dll not found的异常。
二、尝试解决
看到这个异常,我想都没想就点开生成的Debug文件夹,抱着缺什么就找什么的心态去搜MySQL.data dll,果然没找到,于是就打开MySQLHelper项目把引用的MySql.data 生成时复制到本地,此时MySQL.data dll已经在输出目录下了,再次运行,依然报错。
随后采用百度里面某大神的策略,在程序开始跑的时候强行指定路径去加载MySQL.data dll,这次终于没报 MySQL.data dll not found,但是却报了System.Security.Permissions加载错误。
三、问题分析
此时心中直接冒出百个问号。王德发?System里面的东西还能加载失败?而且在启动项目中也能引用到,难道是引用项目和启动项目用的程序集不是共用的?
最后在启动项目里面的管理NuGet包那里添加了MySQL.data,看到安装时提示是否安装System.Security.Permissions等dll时,我感觉应该是稳了。安装完MySQL.data的NuGet包后运行一切正常,那段强行加载的代码也可以去掉了。
四、总结
回头看看才发现原来是个很弱智的问题,启动项目里引用的程序集和引用项目里的程序集不是共用的,也就是说,我在引用项目里用了MySQL.data,启动项目里没用,就算启动项目是通过引用项目使用MySQL相关方法时也会报错,因为在启动项目中根本没有引用MySQL.data。

发布了15 篇原创文章 · 获赞 2 · 访问量 4867

猜你喜欢

转载自blog.csdn.net/weixin_38138153/article/details/83475941
今日推荐