首页 新闻 会员 周边

netcore多个项目引用同一个dll,是否有办法共用

0
悬赏园豆:20 [已解决问题] 解决于 2018-07-09 18:38

比如:A项目和B项目都引用了[Newtonsoft.Json.dll],发布部署到linux,是否可以指定到某个目录,比如lib,然后将[Newtonsoft.Json.dll]放入该lib目录,然后netcore项目的引用指定到lib中查询?

无眠的主页 无眠 | 初学一级 | 园豆:134
提问于:2018-07-07 16:39
< >
分享
最佳答案
0

默认(Framework-dependent deployment 发布方式)就是公用的,都是引用 ~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0 中的 Newtonsoft.Json.dll

如果用的是 self-contained deployment 发布方式,则每个项目的发布文件夹中都有 Newtonsoft.Json.dll

收获园豆:20
dudu | 高人七级 |园豆:31003 | 2018-07-07 16:49

大佬,对于netcore发布还不是很熟悉,有推荐的文章?另外linux下,刚开始应该没有Newtonsoft.Json.dll,是需要自己拷贝,还是直接敲命令就可以自动下载到[~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0]中?

无眠 | 园豆:134 (初学一级) | 2018-07-07 18:25

我的是控制台程序,用的公用发布方式(第一种),右击发布后,在发布的文件夹还是有[Newtonsoft.Json.dll]

无眠 | 园豆:134 (初学一级) | 2018-07-07 19:44

@无眠: 用 dotnet publish -c Release 命令发布试试

dudu | 园豆:31003 (高人七级) | 2018-07-08 10:07

@dudu: 在publish文件夹下还是有[Newtonsoft.Json.dll]

无眠 | 园豆:134 (初学一级) | 2018-07-08 17:42

@无眠: 控制台项目的确会包含 Newtonsoft.Json.dll ,ASP.NET Core 项目不会包含

dudu | 园豆:31003 (高人七级) | 2018-07-08 21:29

@dudu: 依然感谢。不知道控制台程序后面怎么样,重用dll。否则每个控制台都引用相同的,文件太多了

无眠 | 园豆:134 (初学一级) | 2018-07-09 16:14

@无眠: 可以试试CoreRT,参考 使用CoreRT将.NET Core发布为Native应用程序

dudu | 园豆:31003 (高人七级) | 2018-07-09 16:22

@dudu: 嗯,多谢了。我再研究研究

无眠 | 园豆:134 (初学一级) | 2018-07-09 16:49

@dudu: 再问下,ASP.NET Core项目的话,部署到linux,[Newtonsoft.Json.dll]是放在哪里的?你们一般是如何处理放置该dll的,直接拷贝过去,还是用命令来下载该dll?

无眠 | 园豆:134 (初学一级) | 2018-07-09 18:02

@无眠: 是用 dotnet publish 发布的,刚看了一下,Newtonsoft.Json.dll 也是包含在发布文件夹中。
之前弄错了,只有在通过 dotnet run 命令运行的情况下才会从 ~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0 中加载 Newtonsoft.Json.dll ,asp.net core 与控制台项目都是这样

dudu | 园豆:31003 (高人七级) | 2018-07-09 18:18

@dudu: 那你们发布项目也是,全部拷贝过去的?比如都放在website1目录下(共用的没有提取出来)

无眠 | 园豆:134 (初学一级) | 2018-07-09 18:31

@无眠: 没有提取出来,也不需要提取出来,尤其是docker部署的场景

dudu | 园豆:31003 (高人七级) | 2018-07-09 18:33

@dudu: 好,明白了。多谢

无眠 | 园豆:134 (初学一级) | 2018-07-09 18:38
其他回答(2)
0

使用相对路径引用

Linux文件夹:
/usr/local/lib #放公用lib
/usr/local/share #放程序文件夾

程序文件夹和公用lib:
/usr/local/lib/mylib/xxx.dll #mylib放公用lib
/usr/local/share/myapp1 #myapp1程序文件夾
/usr/local/share/myapp2 #myapp2程序文件夾

在myapp1和myapp2里都这样引用公用lib:
../../lib/mylib/xxx.dll

大豆男生 | 园豆:608 (小虾三级) | 2018-07-09 16:11

netcore可以这样以下这样引用dll?

../../lib/mylib/xxx.dll

 

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2018-07-09 16:13

@无眠: 可以

支持(0) 反对(0) 大豆男生 | 园豆:608 (小虾三级) | 2018-07-09 16:25

@无眠: 试了,相对路径引用是可以。但是发布之后,还是在同一个文件夹,把公共dll移到公共文件夹,会找不到公共dll。

支持(0) 反对(0) 大豆男生 | 园豆:608 (小虾三级) | 2018-07-09 16:43

@大豆男生: 是的,就是愁这个。

支持(0) 反对(0) 无眠 | 园豆:134 (初学一级) | 2018-07-09 16:46
0

通用做法是将dll放到nuget服务器上。nuget服务器可以自己搭建在内网。很简单的。

沐雪架构师 | 园豆:67 (初学一级) | 2020-03-29 14:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册