• .Net core 程序Nuget包独立存放 (二)


    在上篇博文.Net core 程序Nuget包独立存放(一)中介绍了运行环境中,如何实现将nuget库存放,还有一个问题没有解决:如何将nuget包从publish的程序集中分离。本文就介绍下如何解决这个问题:

    首先,利用dotnet store命令,将nuget包导出,同时并生成目标清单。

    dotnet store -m test.csproj -r win-x64 --skip-optimization --skip-symbols -o r:packages

    这个命令也可以用于解决方案文件,输出结果如下:

    test.csproj 的还原在 488.63 ms 内完成。
    Files were composed in r:packagesx64 etcoreapp3.1
    The list of packages stored is in r:packagesx64 etcoreapp3.1artifact.xml

    其中,展示了nuget包的存储路径,以及程序清单文件。

    然后,在发布的时候,指定nuget目标清单,则会裁剪对应的程序包。

    dotnet publish --manifest r:packagesx64 etcoreapp3.1artifact.xml

    再配合上文的设置,修改xxx.runtimeconfig.json文件,指定程序搜索路径,即可实现nuget包独立存储。

    {
      "runtimeOptions": {
        "tfm""netcoreapp3.1",
        "framework": {
          "name""Microsoft.NETCore.App",
          "version""3.1.0"
        },
        "additionalProbingPaths": [
          "R:\packages\x64\netcoreapp3.1"
        ]
      }
    }

    该路径也可以写成自适应的方式:

    "R:\packages\|arch|\|tfm|"

    遇到的问题

    实际使用中,就会发现,对于稍微大一点的项目,会存在程序集互相依赖的情况,这个时候dotnet store目录非常容易出错。试了各种参数,也没有找到方法解决。正当我准备放弃的时候,发现了另一种途径。

    1. 用dotnet list package命令,枚举出解决方案或项目中依赖的所有程序包
    2. 新建一个简单的工程,将这些程序包囊括进去,一个示例如下:

    <Project Sdk="Microsoft.NET.Sdk">

      <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <OutputType>Library</OutputType>
      </PropertyGroup>

      <ItemGroup>
        <PackageReference Include="System.Interactive" Version="4.0.0" />
        <PackageReference Include="StackExchange.Redis" Version="2.0.601" />
        <PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
        <PackageReference Include="RabbitMQ.Client" Version="5.1.2" />
      </ItemGroup>
    </Project>

    我的做法是将解决方案的所有Nuget程序包去重后合入一个工程文件,再对这个工程进行dotnet store命令,就非常容易的导出nuget库了。

  • 相关阅读:
    Java数组
    Java非访问修饰符
    Java 循环结构
    Java修饰符
    Java语句
    DDK
    HDC中的前景色与背景色
    如何控制一个程序只能有一个进程
    把一个bmp转换成cur显示出来(掩码mask)
    怎么设置IE代理服务器
  • 原文地址:https://www.cnblogs.com/TianFang/p/12424902.html
Copyright © 2020-2023  润新知