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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux技术笔记(常用命令)持续更新中。。。

文章目录1、Linux 下解压 .zip 和 .rar 文件2、 [Mac 终端命令大全](https://www.jianshu.com/p/3291de46f3ff)3、Maven环境本地仓库目录阿里云仓库镜像系统环境变量mac 配置环境变量&#xff0c;退出终端失效的问题1、Linux 下解压 .zip 和 .rar 文件 解压 .zip zip -r file…

iMovie使用技巧

iMovie使用技巧 学习视频&#xff1a; 流程笔记&#xff1a; J、k、l浏览片段 1、i 设置出点 2、o设置入点 3、剪辑阶段可直接拖动片段&#xff0c;浏览阶段f设置为喜欢&#xff0c;有一条绿色的线 4、不喜欢的素材可直接按delete&#xff0c;标记为不喜欢&#xff0c;有一条红…

使用Azure AD B2C为ASP.NET Core 设置登录/注册

一&#xff0c;引言上次关于Azure AD B2C 讲到一些概念&#xff0c;有介绍到&#xff0c;Azure AD B2C 也是一种身份验证的解决方案&#xff0c;但是它运行客户使用其首选的社交&#xff0c;企业或者本地账户标识对应用程序和API进行单一登录访问。同样&#xff0c;Azure AD B2…

safari浏览器的使用tips

前言&#xff1a;最近毕设&#xff0c;原有Windows电脑太卡&#xff0c;再加上用mac习惯了&#xff0c;就买了mac笔记本&#xff0c;最后还是safari好用&#xff0c;那就整理下我在使用中好用的快捷键或者小tips 文章目录截图截图 全屏截图 shiftcommand3 safari界面浮窗 shif…

使用 Azure Function 定时启动云 VM

点击上方蓝字关注“汪宇杰博客”导语微软 Azure 平台的 VM 可以做到定时自动关机&#xff0c;然而只有 DevTest Lab 服务中的 VM 能够定时开机&#xff0c;普通用途的 VM 还没有上线这个功能。但是没关系&#xff0c;我们可以曲线救国&#xff0c;通过最新版的 Azure Function …

一个毕设的建成——记录下我毕设途中的《SOP》

文章目录记录过程中遇到解决的方法1、pom导入的包&#xff08;权限比较大&#xff09;记录过程中遇到解决的方法 https://blog.csdn.net/zeng_jun_yv/article/details/118892438 1、pom导入的包&#xff08;权限比较大&#xff09; <&#xff01;--https://mvnrepository…

文章目录 | .NET Core on K8s学习之旅 (更新至20200618)

.NET Core on K8s学习之旅更新记录&#xff1a;-- 20200511 增加Ingress & Nginx Ingress介绍-- 20200515 增加Ocelot API网关集成示例介绍-- 20200525 增加Ingress实现灰度发布示例介绍1关于这个系列文章自从2018年底离开工作了3年的M公司加入X公司之后&#xff0c;开始了…

【Blog.Core重要升级】:封装服务扩展层

昨天有群里小伙伴咨询了一个问题&#xff1a;关于如何在Blog.Core项目中&#xff0c;实现多资源终端的问题&#xff0c;比如这样&#xff1a;一个AdminMvc的管理后台&#xff08;MVC项目&#xff09;&#xff0c;一个WebApi项目&#xff0c;一个ConsoleApp的控制台项目&#xf…

如何激发团队潜能?

每个技术人员最终可能都会走上管理岗位&#xff0c;从最初的开发 Leader、到部门负责人、甚至到 CTO,这每一个角色的转变&#xff0c;都需要付出巨大的努力去进行思维的转变。最近读的《授权》这本书可以让我们更好地胜任管理这个岗位。本书的作者马凯特是一名海军军官&#xf…

快速打造属于你的接口自动化测试框架

1 接口测试接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。接口自动化相对于UI自动化来说&#xff0c;属于更底层的测试&#xff0c;这样带来的好处就是测试收益更大&#xff0c;…

Java Number Math 类方法

Java Math 类 Java 的 Math 包含了用于执行基本数学运算的属性和方法&#xff0c;如初等指数、对数、平方根和三角函数。 Math 的方法都被定义为 static 形式&#xff0c;通过 Math 类可以在主函数中直接调用。 public class Test { public static void main (String []args…

lin-cms-dotnetcore功能模块的设计

先来回答以下问题。1.什么是cms&#xff1f;Content Management System&#xff0c;内容管理系统。2.dotnetcore是什么&#xff1f;.NET Core&#xff0c;是由Microsoft开发&#xff0c;目前在.NET Foundation(一个非营利的开源组织)下进行管理&#xff0c;采用宽松的MIT协议&a…

C++二维数组作为函数参数

#include <iostream> #include <Windows.h>//版本一 省略函数 //二维数组省略一个高维函数 但低维位函数必须定义 void printf1(int a1[][3]){for(int i0; i<3; i){for(int j0; j<3; j){printf("%d\t", a1[i][j]);}printf("\n");} }//…

研发协同平台数据库死锁处理及改进

源宝导读&#xff1a;数据库死锁是高并发复杂系统都要面临课题&#xff0c;处理死锁问题没有一招制敌的标准方法&#xff0c;需要具体问题具体分析。本文将基于研发协同平台遇到的死锁案例&#xff0c;介绍从监控、分析到处理的完整过程和经验总结。一、背景研发协同平台使用的…

Java substring() 方法

substring() 方法返回字符串的子字符串。 语法 public String substring(int beginIndex)或public String substring(int beginIndex, int endIndex)参数 beginIndex – 起始索引&#xff08;包括&#xff09;, 索引从 0 开始。 endIndex – 结束索引&#xff08;不包括&…

简单说说async/await

小明用async/await写了几年的异步方法&#xff0c;但总没有完全理解里面的机制&#xff0c;他决定去请教邻居小花。小花听了小明的描述后说&#xff1a;首先你要明白异步的根本是什么&#xff1f;大白话解释异步就是&#xff1a;拉一个人&#xff08;线程&#xff09;帮着做一些…

Java设计链表(不带头结点的单链表)

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性&#xff1a;val 和 next。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。如果要使用双向链表&#xff0c;则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所…