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-p
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
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 是如何还原包的相关推荐
- nuget 构建自己的包_适用于企业的NuGet:持续集成自动构建系统中的NuGet
nuget 构建自己的包 I had the pleasure of speaking at TechEd 2011 North America last week in Atlanta. You c ...
- 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
在使用 NuGet 包来分发源代码时,如果目标项目是 WPF 项目,那么会有一大堆的问题. 本文将这些问题列举出来并进行分析. 本文内容 源代码包 基础代码:最小的例子 用于打源代码包的项目 Walt ...
- .net项目与下载包之间不兼容时,如何下载NuGet之前版本的包
直接使用install下载会获取最新版本的包,但是此时出现了与项目环境版本不兼容的问题: [1]进入NuGet官网,点击version [2]根据年份选择一个之前的版本点入 [3]点击Framewor ...
- nuget在jenkins上不能自动还原项目依赖包---笔记
最近遇到一个情况,IDE 是 VS2015 Update3 ,新建一个library项目(暂时叫做 mytests),然后用 nuget 安装了一个 Shouldly 包 在 VS 上一切正常,可以跑 ...
- 用命令行工具创建 NuGet 程序包
NuGet.exe 下载地址 本文翻译自: https://docs.nuget.org/Create/Creating-and-Publishing-a-Package https://docs.n ...
- 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
默认情况下,我们打包 NuGet 包时,目标项目安装我们的 NuGet 包会引用我们生成的库文件(dll).除此之外,我们也可以专门做 NuGet 工具包,还可以做 NuGet 源代码包.然而做源代码 ...
- 基于 .Net Core 的组件 Nuget 包制作 amp; 发布
微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 . ...
- nuget包循环引用问题
1.项目中有类库YesWay.Nlog.RabbitMQ,依赖项如下 YesWay.Nlog.RabbitMQ=>YesWay.Service.Discovery=>YesWay.Log ...
- NuGet 的打包教程,使用UI工具 NuGetPackageExplorer 进行打包,处理包的依赖项
初衷:自己尝试搭建NuGet 服务器很轻松的就完成了,但是打包NuGet包的时候踩了很多坑. NuGetPackageExplorer 这款工具很好用,但是GitHub的地址下载真的很慢,网上搜索不到 ...
最新文章
- python登录代码思路_用python登录Dr.com思路以及代码分享
- 创业计划书模板(周鸿祎口述)
- myBaits SQL
- Linux 下 *.tar.gz 文件解压缩命令
- php读取文件和读取redis,PHP结合redis实现大文件去重
- php 字符串内容过滤,php过滤字符串内容的
- 计算机网络相关的知识,计算机网络知识整理
- 分布式认证需求-开放认证体系
- 小心使用tf.image.resize_images,填坑经验分享给你
- Sharepoint创建List
- sql给已有数据中的表添加字段并且填充不同的数据
- 485通讯协议_终于有人把RS485通讯协议应用及缺点分析清楚了,看完收获多多
- Dispose(bool disposing)模式被破坏
- oracle出现ora 12514,ora-12514报错解决方法
- 8.绘制统计图形——直方图
- 信息系统项目管理师第四版(最新)重点(背诵)内容概览
- 《咸鱼分享》咸鱼在线TOP
- android 双卡铃声,铃声多多双卡版
- 韩顺平学Java之九九乘法表
- 原生js进阶版轮播图实现(走马灯效果,无缝衔接)