-->

Asp.Net Core 2.1 项目 程序集引用的坑

2019-01-02 20:36发布

问题:

有一个公共的a.dll做一些公共的封装,比如日志,缓存,数据库操作等等。
a.dll引用了log4net.dll这个动态库

这个时候Asp.Net Core 2.1 项目引用程序集a.dll,调用a里面封装的日志操作方法。
编译正常,运行报错 提示找不到log4net.dll这个动态库
把log4net.dll拷贝到运行目录,运行还是一样报错

这个时候主项目直接引用log4net.dll,编译,运行正常

这里有个疑问,a.dll这个封装的公共库,在使用的时候项目还得把a.dll引用的其他动态库都给引用一遍,这感觉很坑啊,引用的都是主项目不直接使用的,这样不是主项目太多太多引用了,为什么不能就直接引用a.dll,其他的动态库考过去呢?

回答1:

网上的解决方案都是要求要么项目引用,要么打包成nuget包
这两种方案试过能解决运行报错问题。
但是都有不方便的地方
项目引用,要把项目解决方案源码丢给每个使用者
nuget包,公司内部公共库不方便都上传到nuget平台。
公司内部自建nuget服务器,但有时候项目组工作环境不固定,比如出差等等,不一定都能访问到内网的私有库。

如果一定要使用程序集引用方式。试了很多次之后发现如下方案:
公共程序集A(比如A引用了B、C、D、E、F等等程序集)。
主项目ASP.NET Core 程序要引用程序集A,通过A使用内部封装的各种方法。
项目公共的程序集文件夹Parkage里面要把A,和A引用的B、C、D、E、F等等程序集全部考进去。
这个时候主程序只需要引用A一个,其他的不需要引用。编译,运行正常
这里虽然主程序不需要一个个的引用第三方的各个程序集,但要把他们放到和引用的A在同一个目录

程序集引用方面.net core这块没有.net framework来的方便,官方也提倡使用nuget包分发。应该是内部运行机制改变了。



回答2:

要么直接引用项目a,要么项目a发布nuget包给其他项目引用



回答3:

core里面基本都用Nuget的包了,你可以直接引用包,应该就可以了



回答4:

发布nuget包,内网自己搭一个完事。



标签: