离线安装NuGet包主要分为两个阶段:指定安装源及下载包及其依赖项。本文记录在VS2022中离线安装NuGet包的过程及注意事项。
离线安装NuGet包,主要有两种方式:1)搭建局域网或本机NuGet服务器,将VS2022的源指定为NuGet服务器地址后安装,可以参考《学习在windows上搭建NuGet服务器》搭建NuGet服务器;2)将NuGet包文件复制到本机文件夹,直接指定该文件夹为NuGet包源,其实VS2022默认的包源中包含本机文件夹的包源(Microsoft Visual Studio Offline Packages),在NuGet包管理器中能够看到离线包源中的NuGet包清单,如下图所示:
在VS2022中新建名为LocalNuGet的离线包源,将源指定为本地文件夹,下一步就是获取NuGet包,然后将其复制到文件夹内。
获取NuGet包有以下几种方式:
1)在NuGet官网或者其中NuGet服务网站中下载所需的NuGet包,然后将其复制到离线包源所在文件夹;
2)将Microsoft Visual Studio Offline Packages中能用的离线包复制到离线包源所在文件夹;
3)在能联网的电脑中使用VS2022在线安装所需的NuGet包,然后在本机当前用户下的nuget文件夹中(C:\Users\当前用户名.nuget\packages,如下图所示)复制所需的NuGet包,然后将其复制到离线包源所在文件夹。如果不清楚上述文件夹的位置,可以在VS2022的解决方案资源管理器->依赖项->包中指定包上点右键,选择“在文件资源管理器中打开文件夹”即可。
最后一点,也是很麻烦的一件事,即同步下载和复制NuGet包的依赖项到离线包源所在文件夹,找全依赖项以及依赖项的依赖项很麻烦,经常会漏项(联网使用VS安装包时,如果勾选了在线包源,安装本机离线包源中的包时,如果本机缺少包或依赖项,VS会自动在线安装)。获取依赖项主要有三种方式:
1)使用nuget.exe下载NuGet包及其所有依赖项。nuget.exe会将包及依赖项下载到指定的文件夹内,具体用法详见参考文献4或百度,但是实际使用过程中不知道是不是使用的命令参数不对或不全,下载sqlsugarcore包时,虽然下载了几十项共计两百多M的内容,但是离线安装时还是报错少依赖项;
2)在线安装所需NuGet包后,将本机当前用户下的nuget文件夹中(C:\Users\当前用户名.nuget\packages,如下图所示)的所有文件都复制到离线包源所在机器的文件夹内(本人电脑上packages中内容有将近10G,太多太大了,就没有试这种方式。有需要的可以找台没有装过NuGet包的机器,安装NuGet包后使用本机当前用户下的nuget文件夹内容,应该不会太大);
3)使用nuget.exe下载依赖项后,离线安装时缺什么包就下载什么包,这种方式比较费时间,容易把人搞得很烦躁。
参考文献:
[1]https://blog.csdn.net/weixin_44084713/article/details/122827187
[2]https://www.cnblogs.com/uuum/articles/17478358.html
[3]https://www.nuget.org/
[4]https://learn.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-nuget-cli