nuget 包是如何还原的
nuget 包是如何还原的
Intro
一直以来从来都只是简单的用 nuget 包,最近想折腾一个东西,需要自己搞一个 nuget 包的解析,用户指定 nuget 包的名称和版本,然后去解析对应的 nuget 包并添加引用到项目,
于是就想搞明白 nuget 包是怎么还原的,对于本地已经下载了的 nuget 包又是怎么找的
Nuget 包的引用
对于 dotnetcore 项目(这里不算之前那种 project.json 的项目,只讨论
*.csproj这种项目),都是使用新的项目格式,
PackageReference模式
示例:
<PackageReference Include="WeihanLi.Common" Version="1.0.39" />
对于 dotnet framework 项目,如果使用
PackageReference包格式和上面一样,如果是传统的
packages.config包形式,会有一个
packages.config的文件包含引用的 nuget 包,文件内容示例:
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net452" /> </packages>
本文主要说明 dotnetcore 这种
PackageReference这种形式
nuget 包的还原
nuget 包在第一次从 nuget.org 或自己的包源上下载之后会存放在本地的一个文件夹中,下次再需要相同版本的包还原时就会直接从本地的包中获取,而这个保存的文件夹是 nuget 配置的一部分,在网上可以找到一些修改 nuget 默认保存 packages 文件夹的位置,但是这些文章都很类似,都只是给出了一个解决方案然而并没有说明为什么要这么做,这么做的根据是什么并没有说明,其实这种解决方案是添加了一个默认的 nuget 配置文件,修改了 nuget 包保存的位置
nuget 配置
默认配置
nuget 会有一些默认的配置,可以参考官方文档: https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#config-section
nuget 配置中有一个
globalPackagesFolder的配置,是用来指定默认的 nuget 包保存的位置,在 Windows 上默认的保存位置是
%userprofile%\.nuget\packages,在 Linux/Mac 上默认的保存位置是
~/.nuget/packages,可以使用
nuget.config或
NuGet.Config配置文件来修改默认的保存文件,除此之外,还可以通过环境变量的方式,配置
NUGET_PACKAGES来修改默认 nuget 包保存的位置
默认配置文件
nuget 配置的默认配置文件,官方文档:https://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-config#options
Windows 上默认配置文件的位置是
%AppData%\NuGet\NuGet.Config这也是现在网上那些修改默认保存 nuget 包位置的解决方案,
Linux/Mac 上大多是
~/.config/NuGet/NuGet.Config,有的可能是
~/.nuget/NuGet/NuGet.Config(和系统版本有关系)
Windows 上默认是没有这个配置文件的,添加这个默认配置文件之后就是全局作用的
创建
%AppData%\NuGet\NuGet.Config这个默认的配置文件,然后在这个配置文件里配置
globalPackagesFolder来修改默认的 nuget 包保存路径
示例:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </packageSources> <config> <add key="globalPackagesFolder" value="D:\nuget\packages" /> </config> </configuration>
Reference
- 如何从数据库的完整日志模式还原误删除的数据 .
- Win7中如何删除还原点不需要它了
- 如何将oracle中存放的图片(如Blob类类型的字段)还原成一副图片
- source insight 如何还原默认配置
- Windows8如何使用文件历史记录还原文件
- Mysql 如何备份与还原数据库(在Mysql Workbench)
- 系统管理员 AD如何还原活动目录
- 如何禁用或启用 Windows XP 系统还原
- SQL2000如何还原数据库备份bak文件?
- 字符串如何还原为中文
- 如何还原 Outlook Express 项
- windows如何创建系统还原点和还原点还原系统的使用方法
- Oracle重新装机后如何快速还原以前表和用户
- win10 uwp 如何打包Nuget给其他人
- Win 7 如何备份与还原 Ubuntu
- U-Mail邮件系统如何针对某账户进行数据还原
- 16. SQL -- 如何把高版本的sqlserver还原到低版本的sqlserver
- bak文件如何还原数据库文件
- vs中如何使用NuGet
- 如何一键还原你的ubuntu桌面到原来的配置