默认(Framework-dependent deployment 发布方式)就是公用的,都是引用 ~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0
中的 Newtonsoft.Json.dll
如果用的是 self-contained deployment 发布方式,则每个项目的发布文件夹中都有 Newtonsoft.Json.dll
大佬,对于netcore发布还不是很熟悉,有推荐的文章?另外linux下,刚开始应该没有Newtonsoft.Json.dll,是需要自己拷贝,还是直接敲命令就可以自动下载到[~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0]中?
我的是控制台程序,用的公用发布方式(第一种),右击发布后,在发布的文件夹还是有[Newtonsoft.Json.dll]
@无眠: 用 dotnet publish -c Release
命令发布试试
@dudu: 在publish文件夹下还是有[Newtonsoft.Json.dll]
@无眠: 控制台项目的确会包含 Newtonsoft.Json.dll ,ASP.NET Core 项目不会包含
@dudu: 依然感谢。不知道控制台程序后面怎么样,重用dll。否则每个控制台都引用相同的,文件太多了
@无眠: 可以试试CoreRT,参考 使用CoreRT将.NET Core发布为Native应用程序
@dudu: 嗯,多谢了。我再研究研究
@dudu: 再问下,ASP.NET Core项目的话,部署到linux,[Newtonsoft.Json.dll]是放在哪里的?你们一般是如何处理放置该dll的,直接拷贝过去,还是用命令来下载该dll?
@无眠: 是用 dotnet publish
发布的,刚看了一下,Newtonsoft.Json.dll 也是包含在发布文件夹中。
之前弄错了,只有在通过 dotnet run
命令运行的情况下才会从 ~/.nuget/packages/newtonsoft.json/11.0.2/lib/netstandard2.0
中加载 Newtonsoft.Json.dll ,asp.net core 与控制台项目都是这样
@dudu: 那你们发布项目也是,全部拷贝过去的?比如都放在website1目录下(共用的没有提取出来)
@无眠: 没有提取出来,也不需要提取出来,尤其是docker部署的场景
@dudu: 好,明白了。多谢
使用相对路径引用
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
netcore可以这样以下这样引用dll?
../../lib/mylib/xxx.dll
@无眠: 可以
@无眠: 试了,相对路径引用是可以。但是发布之后,还是在同一个文件夹,把公共dll移到公共文件夹,会找不到公共dll。
@大豆男生: 是的,就是愁这个。
通用做法是将dll放到nuget服务器上。nuget服务器可以自己搭建在内网。很简单的。