.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:\packages\x64\netcoreapp3.1\
The list of packages stored is in r:\packages\x64\netcoreapp3.1\artifact.xml

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

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

dotnet publish --manifest r:\packages\x64\netcoreapp3.1\artifact.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库了。

原文地址:https://www.cnblogs.com/TianFang/p/12424902.html

时间: 2024-11-10 15:45:33

.Net core 程序Nuget包独立存放 (二)的相关文章

asp.net core 三 Nuget包管理

参考连接:http://www.cnblogs.com/netcore2/p/7412891.html 这里的说明,基本就是学习了别人的文章,自己做了个备份 asp.net core中,针对项目中的包管理,做了很多的性能优化,如果项目中通过Nuget引用了包,但是在项目目录找不到了package文件,而且生成目录也没有对应的应用的dll生成,那项目是如何运行以及引用nuget包,这些包都在哪里? 1.对于应用程序引用的Framework包,微软提供了运行时包仓(runtime package s

.Net core 还原Nuget包失败的解决方法

今天是2018最后一天了,真是神奇的一年啊,写个博客压压惊,来年继续加油吧..... 正文: 当我们打开.net core 项目时候,发现输出提示nuget包还原失败,这个时候首先要考虑.Net Core SDK的版本,可以用命令行去查看,命令行界面输入dotnet --version 就可以知道所安装的SDK是什么版本的了.如图,我安装的是2.1.502 版本 由于.net core 是向下兼容的,所以如果安装的是2.0,项目使用的又是2.1,那么有可能会造成nuget包还原失败. 如果版本和

.NET Core 学习笔记2&mdash;&mdash;管理nuget包

.NET Core 基于Nuget包.它是一个.nupkg后缀的zip文件. 工具 dotnet 工具 vs2017 的程序包管理控台 这两个工具都可以用命令行来下载安装,更新,上传包(上传要先在网站注册账号):也可以用vs里面的UI工具管理. 项目文件控制包 项目文件(.csproj后缀)是一个xml文件,描述了引用包的关系,很多时候需要手工编辑这个来达到高级目标. <ItemGroup> <!-- ... --> <PackageReference Include=&qu

运用.net core配合VS 2015制作nuget包

以往做nuget包我们一般要么用命令行,要么用nuget的图形化界面去做,但是一些操作比较麻烦.比如引入命名空间,引入第三方nuget包.今天,我们来讲解下一种全新的构建方式. 环境: win10 VS2015 企业版 .net 全家桶(.net framework,dnx,.NET core) Why: 运用.net core+官方这种特殊类库项目,一切都可以用代码编辑完成,不需要做一些对我们来讲非常额外的工作,于是乎,构建变得无比简单.本人强烈建议以后做nuget类库的时候都用这样的方法.

一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 &amp; 发布

微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 Nuget 包和发布. 之前 .Net Framework 程序集打包 Nuget 有以下方法: 1. 使用命令  nuget pack  详见博客园的一篇博文 <用命令行工具创建 Nuget 程序包>: 2. 使用 NuGet Package Explorer: 3. vs 插件 NuBuild Project System.

开发.NET Core NuGet包并实现CI/CD

实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用.上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这里不再赘述. CI/CD流程如下图: 首先公共类库代码通过Git管理,编辑完代码后上传到Git服务器. 配置Jenkins Job,按设定的触发条件进行构建任务. 构建开始,删除Workspace中旧文件,从Git服务器下载最新代码,执行编译,生成NuGet包,上传到NuGet服务器. 这样,别人就

Nuget包管理工具(程序包控制台执行语句)

NUGET命令 注:使用前确保nuget是最新版本,升级到最新版本有两种方式: (1).CMD将nuget升级到最新版本:nuget update -self (2).扩展中查看nuget是否需要更新. 一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安装到指定的项目install-package <程序包名> -project XXXProjectName -version <版本号> 二.更新

如何发布同时支持.net core和.net framework的nuget包

原文:https://blog.csdn.net/quxing10086/article/details/80258422 项目支持多版本的改造步骤 过程中其实没有想到,要发布一个同时支持 Net Standard 2.0 和 Net Framework 4.5 版本的 Nuget 包,还是比较繁琐的.需要将原来的两个分支的代码合并到一起,并通过预处理命令来分别编译为不同版本. 下面,简单记录一下一些重要的步骤: 创建并使用新的 Net Standard 项目文件格式来创建. 修改 Rafy.c

.NET Core + EF 报nuget包不兼容

错误信息如下: 严重性 代码 说明 项目 文件 行 禁止显示状态错误 NU1107 Microsoft.EntityFrameworkCore 中检测到版本冲突.直接安装/引用 Microsoft.EntityFrameworkCore 2.2.4 到项目 CoreWeb 可解决此问题. CoreWeb -> CoreWeb.Entities -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrame