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-p

nuget 配置中有一个 globalPackagesFolder 的配置,是用来指定默认的 nuget 包保存的位置,在 Windows 上默认的保存位置是 %userprofile%\.nuget\packages,在 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%\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

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

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

nuget 是如何还原包的相关推荐

  1. nuget 构建自己的包_适用于企业的NuGet:持续集成自动构建系统中的NuGet

    nuget 构建自己的包 I had the pleasure of speaking at TechEd 2011 North America last week in Atlanta. You c ...

  2. 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

    在使用 NuGet 包来分发源代码时,如果目标项目是 WPF 项目,那么会有一大堆的问题. 本文将这些问题列举出来并进行分析. 本文内容 源代码包 基础代码:最小的例子 用于打源代码包的项目 Walt ...

  3. .net项目与下载包之间不兼容时,如何下载NuGet之前版本的包

    直接使用install下载会获取最新版本的包,但是此时出现了与项目环境版本不兼容的问题: [1]进入NuGet官网,点击version [2]根据年份选择一个之前的版本点入 [3]点击Framewor ...

  4. nuget在jenkins上不能自动还原项目依赖包---笔记

    最近遇到一个情况,IDE 是 VS2015 Update3 ,新建一个library项目(暂时叫做 mytests),然后用 nuget 安装了一个 Shouldly 包 在 VS 上一切正常,可以跑 ...

  5. 用命令行工具创建 NuGet 程序包

    NuGet.exe 下载地址 本文翻译自: https://docs.nuget.org/Create/Creating-and-Publishing-a-Package https://docs.n ...

  6. 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)

    默认情况下,我们打包 NuGet 包时,目标项目安装我们的 NuGet 包会引用我们生成的库文件(dll).除此之外,我们也可以专门做 NuGet 工具包,还可以做 NuGet 源代码包.然而做源代码 ...

  7. 基于 .Net Core 的组件 Nuget 包制作 amp; 发布

    微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 . ...

  8. nuget包循环引用问题

    1.项目中有类库YesWay.Nlog.RabbitMQ,依赖项如下 YesWay.Nlog.RabbitMQ=>YesWay.Service.Discovery=>YesWay.Log ...

  9. NuGet 的打包教程,使用UI工具 NuGetPackageExplorer 进行打包,处理包的依赖项

    初衷:自己尝试搭建NuGet 服务器很轻松的就完成了,但是打包NuGet包的时候踩了很多坑. NuGetPackageExplorer 这款工具很好用,但是GitHub的地址下载真的很慢,网上搜索不到 ...

最新文章

  1. python登录代码思路_用python登录Dr.com思路以及代码分享
  2. 创业计划书模板(周鸿祎口述)
  3. myBaits SQL
  4. Linux 下 *.tar.gz 文件解压缩命令
  5. php读取文件和读取redis,PHP结合redis实现大文件去重
  6. php 字符串内容过滤,php过滤字符串内容的
  7. 计算机网络相关的知识,计算机网络知识整理
  8. 分布式认证需求-开放认证体系
  9. 小心使用tf.image.resize_images,填坑经验分享给你
  10. Sharepoint创建List
  11. sql给已有数据中的表添加字段并且填充不同的数据
  12. 485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多
  13. Dispose(bool disposing)模式被破坏
  14. oracle出现ora 12514,ora-12514报错解决方法
  15. 8.绘制统计图形——直方图
  16. 信息系统项目管理师第四版(最新)重点(背诵)内容概览
  17. 《咸鱼分享》咸鱼在线TOP
  18. android 双卡铃声,铃声多多双卡版
  19. 韩顺平学Java之九九乘法表
  20. 原生js进阶版轮播图实现(走马灯效果,无缝衔接)

热门文章

  1. 试图加载格式不正确的程序
  2. Nova虚拟机启动提示libvirtError
  3. Office SharePoint Server 2007
  4. window 2008 和 windows vista windows 7 安装 MSMQ
  5. 软件项目管理概览----版本控制
  6. 开发Teams Tabs应用程序
  7. ios 开发账号 退出协作_如何在iOS 10中的Notes上进行协作
  8. 面向对象进阶(二)----------类的内置方法
  9. (原創) 07/28/1982 少女A (中森明菜)
  10. opencv---颜色空间转化并实现物体跟踪