zoukankan      html  css  js  c++  java
  • 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:
    ugetpackages" />
      </config>
    </configuration>
    

    Reference

  • 相关阅读:
    iOS开发之视频播放
    iOS开发之Copy & MutableCopy及深复制 & 浅复制
    iOS开发之JSON & XML
    iOS开发之NSObject的多线程
    iOS开发之单例模式
    iOS开发之Run Loop
    taro开发微信小程序-页面开发规范
    视频Video放器的部分实例方法
    Input框搜索关键字高亮显示
    vue上拉加载下拉加载
  • 原文地址:https://www.cnblogs.com/weihanli/p/13170593.html
Copyright © 2011-2022 走看看