加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

nuget 包是如何还原的

发布时间:2020-12-16 09:03:58 所属栏目:asp.Net 来源:网络整理
导读:nuget 包是如何还原的 Intro 一直以来从来都只是简单的用 nuget 包,最近想折腾一个东西,需要自己搞一个 nuget 包的解析,用户指定 nuget 包的名称和版本,然后去解析对应的 nuget 包并添加引用到项目, 于是就想搞明白 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%.nugetpackages,在 Linux/Mac 上默认的保存位置是 ~/.nuget/packages,可以使用 nuget.configNuGet.Config 配置文件来修改默认的保存文件,除此之外,还可以通过环境变量的方式,配置 NUGET_PACKAGES 来修改默认 nuget 包保存的位置

默认配置文件

nuget 配置的默认配置文件,官方文档:https://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-config#options

Windows 上默认配置文件的位置是 %AppData%NuGetNuGet.Config 这也是现在网上那些修改默认保存 nuget 包位置的解决方案,
Linux/Mac 上大多是 ~/.config/NuGet/NuGet.Config,有的可能是 ~/.nuget/NuGet/NuGet.Config(和系统版本有关系)

Windows 上默认是没有这个配置文件的,添加这个默认配置文件之后就是全局作用的

创建 %AppData%NuGetNuGet.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:nugetpackages" />
  </config>
</configuration>

Reference

  • https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file#config-section
  • https://docs.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-config

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读