.NET Core 系列5 :使用 Nuget打包类库

NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以及更新组件即可一键完成,大大提升工作效率,减少不必要的引用报错。从运维角度,可在不影响老版本的情况下发布新版本,可统一管理公司各个项目中组件版本不一和各个版本组件的使用情况,减少故障发生以并使得项目稳定运行。

以往做nuget包我们一般要么用命令行,要么用nuget的图形化界面去做,但是一些操作比较麻烦.比如引入命名空间,引入第三方nuget包。这些在.NET Core项目里却很简单,只需要使用命令行dotnet pack,在.NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门 做了简要介绍,下面我们来详细介绍下这个命令。

dotnet-pack - 将代码打包成 NuGet 包

概要

dotnet pack [--output] [--no-build] [--build-base-path] [--configuration] [--version-suffix] [<project>]

描述

dotnet pack 命令生成项目并创建 NuGet 包。这个操作的结果是两个 nupkg 扩展名的包。一个包含代码,另一个包含调试符号。

该项目被依赖的 NuGet 包装被添加到 nuspec 文件,因此,他们能够在安装包时得到解决。
默认情况下,项目到项目之间的引用是不打包到项目中的。如果你想那样做,你需要在你的依赖中引用需要项目的 type 节点设置为 “build” ,设置就像下面的例子:

{"version": "1.0.0-*","dependencies": {"ProjectA": {"target": "project","type": "build"}}
}

默认情况下,dotnet pack 首先生成项目。如果你想避免这样,传递 --no-build 选项。这在持续集成(CI)构建场景,正如你知道代码仅仅是预生成的示例,会是有用的。

选项

[project]

打包的项目。它还可以是一个 project.json 文件的路径或者是目录。如果忽略,它将默认为当前目录。

-o--output [DIR]

指定生成的目录。

--no-build

打包进程中跳过生成阶段。

--build-base-path

指定临时生成产物的目录。默认情况下,它们在当前目录的 obj 目录。

-c--configuration [Debug|Release]

当生成项目时使用的配置。如果没有指定,将默认为 “Debug”。

例子

dotnet pack

打包当前项目。

dotnet pack ~/projects/app1/project.json

打包 app1 项目。

dotnet pack --output nupkgs

打包当前的应用程序,并将生成的包放置到指定的文件夹中。

dotnet pack --no-build --output nupkgs

打包当前的项目到指定的文件夹中,并跳过生成步骤

 

回到我们在.NET Core系列 :3 、使用多个项目 创建的类库项目DotnetNewLib,切换到DotnetNewLib 目录下执行 dotnet pack命令:

[root@Mono DotnetNewLib]# dotnet pack
Project DotnetNewLib (.NETStandard,Version=v1.6) was previously compiled. Skipping compilation.
Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Debug/DotnetNewLib.1.0.0.symbols.nupkg

 

目录结构如下:

DotnetNewLib

|-- Library.cs

|-- project.json

|-- project.lock.json

+—bin

     +—Debug

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

 

上面的结构里我把obj目录拿掉了,我们看到在Debug目录下生成了2个文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg, 这些就是nuget 包,很简单吧,版本号信息来自于project.json文件:

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  }
}

但是我生成的是Debug,我们生成Release 版本:

dotnet pack -c Release

[root@Mono DotnetNewLib]# dotnet pack -c Release
Project DotnetNewLib (.NETStandard,Version=v1.6) will be compiled because expected outputs are missing
Compiling DotnetNewLib for .NETStandard,Version=v1.6

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:03.4976986


Producing nuget package "DotnetNewLib.1.0.0" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.nupkg
Producing nuget package "DotnetNewLib.1.0.0.symbols" for DotnetNewLib
DotnetNewLib -> /root/DotnetNewLib/bin/Release/DotnetNewLib.1.0.0.symbols.nupkg

生成了Release目录

DotnetNewLib

|-- Library.cs

|-- project.json

|-- project.lock.json

+—bin

     +—Debug

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

     +—Release

              |-- DotnetNewLib.1.0.0.nupkg

              |-- DotnetNewLib.1.0.0.symbols.nupkg

              +-- netstandard1.6

                          |-- DotnetNewLib.deps.json

                          |-- DotnetNewLib.dll

                          +-- DotnetNewLib.pdb

在Release目录下 生成了2个文件DotnetNewLib.1.0.0.nupkg 和DotnetNewLib.1.0.0.symbols.nupkg,第一个文件就是我们想要的nuget包。我们来看下Nuget 包里的具体内容,我们可以用

 NuGet Package Explorer 工具打开DotnetNewLib.1.0.0.nupkg:

里面仅有一个 lib 文件 netstandard1.6 目标配置文件。这意味着,我们 NuGet 包只适用于.Net Core 应用程序 针对 NetStandard1.6 (和即将到来的 4.6.3),文章 拥抱.NET Core,如何开发一个跨平台类库 (1)

对Nuget包做了很好的说明了,推荐大家阅读, 园子里还有一篇《用命令行工具创建 NuGet 程序包》对Nuget 的详细内容做了讲解。

相关文章:

  • .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

  • .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

  • .NET Core系列 :3 、使用多个项目

  • .NET Core系列 :4 测试

原文地址:http://www.cnblogs.com/shanyou/p/5814683.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

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

相关文章

foxmail 不知道这样的主机_华为P50真机图!网友:早知道这样,就不加价买mate40了...

hello&#xff0c;大家好&#xff0c;欢迎收看本期节目由于各方面原因&#xff0c;今年的华为mate40系列确实很难抢不少心急的用户甚至是加价买了入手之后有的用户有开始后悔了&#xff0c;当然不是该机不好而是他们看到了疑似华为P50的真机渲染图它的正面并没有丑陋的双打孔&a…

F#年度调查结果概述

本文要点 年度社区调查向600多名开发人员了解了他们的F#使用情况&#xff1b;在工作中&#xff0c;F#的最大好处包括正确性、让不合法状态不可达以及能够更轻松地解决复杂的问题&#xff1b;大多数F#开发人员仍然使用Windows作为他们的开发平台之一&#xff0c;但使用Mac和Linu…

java Date获取 年月日时分秒

转载自 java Date获取 年月日时分秒 package com.util;import java.text.DateFormat; import java.util.Calendar; import java.util.Date;public class Test {public void getTimeByDate(){Date date new Date();DateFormat df1 DateFormat.getDateInstance();//日期格式&…

anroid 内存溢出 Bitmap OutOfMemoryError

Bitmap OutOfMemoryError 2014年06月09日 09:55:28 阅读数&#xff1a;2434 标签&#xff1a; OutOfMemoryErrorBitmap回收 更多 个人分类&#xff1a; 异常问题和解决办法 在创建Bitmap的时候由于对象过多而没有即使回收&#xff0c;导致的内存不足&#xff1a; java.lang…

wxml报错原因_C#生成、解析xml文件以及处理报错原因

转载自&#xff1a;http://blog.csdn.net/lilinoscar/article/details/21027319简单的介绍一下生成XML文件以及解析&#xff0c;因为有些数据不一定放到数据库&#xff0c;减少链接数据库用xml还是比较好些。如果遇到问题也就是解析时报错&#xff0c;对于解析&#xff0c;可以…

新闻发布项目——接口类(UserDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.User;/*** 用户信息接口* author Administrator**/ public interface UserDao {//查询public List<User>getAllUesr();//添加public int addUser(User user);//修改public int updateUse…

替代反射调用的几种方式及性能测试

园子里和这个话题的相关文章比较多&#xff0c;本文是旧话重提&#xff0c;外加个小的总结。主要因为近期看到很多同事、朋友都已经使用 VS2012 进行 .NET 4.5 开发了&#xff0c;却还在大量使用反射&#xff0c;不知道用新的方式。或有所了解&#xff0c;但又害怕性能不好不敢…

JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

转载自 JAVA解析html文档&#xff0c;替换img图片路径成base64编码&#xff0c;并将文章存入数据库开发环境&#xff1a;struts2 spring hibernate 数据库:oracle 需求&#xff1a;在HTML编辑器中输入文章&#xff0c;传入后台&#xff0c;文章中所有图片路径&#xff0c;转换…

Android Bitmap OutOfMemory 解决办法

Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数&#xff1a;3072 标签&#xff1a; OutOfMemoryBitmapandroid图片优化更多 个人分类&#xff1a; 异常问题和解决办法 在Android应用里&#xff0c;最耗费内存的就是图片资源。而且在Android系统中…

为什么光标停在表格中间_word里面为什么打出来的数字中间为啥差一个光标的距离 - 卡饭网...

为Word宏添加VBA项目的数字证书签名为Word宏添加VBA项目的数字证书签名 用户在使用Word编辑文档时可以借助Word宏命令提高工作效率。在默认情况下&#xff0c;Word宏的安全性设置为“高”&#xff0c;当运行Word宏命令时会自动禁用宏。如果将Word宏安全性设置为“中”&#xff…

Java8学习笔记(1) -- 从函数式接口说起

转载自 Java8学习笔记&#xff08;1&#xff09; -- 从函数式接口说起希望本文能够成为Java8 Lambda表达式的快速入门指南。 函数式接口 理解Functional Interface&#xff08;函数式接口&#xff0c;以下简称FI&#xff09;是学习Java8 Lambda表达式的关键所在&#xff0c;所…

.Net Aop(静态织入)框架 BSF.Aop

BSF.Aop .Net 免费开源&#xff0c;静态Aop织入&#xff08;直接修改IL中间语言&#xff09;框架&#xff0c;类似PostSharp(收费)&#xff1b;实现前后Aop切面和INotifyPropertyChanged注入方式。 开源地址: https://git.oschina.net/chejiangyi/BSF.Aop 开源QQ群: .net 开源基…

C#7.0中有哪些新特性?

以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布&#xff0c;这些特性中的大部分将活跃起来。现在是时候来展示这些特性&#xff0c;你也告诉借此告诉我们你的想法&#xff01; C&#xff03;7.0 增加了许多新功能&#xff0c;并…

java8的函数指针

转载自 java8的函数指针这段时间 项目实在是太紧了&#xff0c;没有时间写博客啊。java模式的文章还没有写完&#xff0c;后期在写吧。 最近项目中大量的使用到了远程调用以及回调。是采用反射的方式实现的。担心到大量的反射会影响到程序运行的效率问题。 所以决定放弃使用反…

新闻发布项目——接口类(newsTbDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.newsTb;/*** 新闻的接口类* author Administrator**/ public interface newsTbDao {//查询public List<newsTb>getnewsTbAll();//添加public int addNewsTb(newsTb news);//修改public i…

nbiot开发需要掌握什么_学习软件开发需要准备什么?

2020年&#xff0c;随着Internet的不断发展&#xff0c;现在Internet已经融入到每个人的生活中&#xff0c;所以在计算机行业的发展中&#xff0c;软件开发技术就显得非常重要&#xff0c;因为它是与我们的生活息息相关的&#xff0c;选择许多人想学习Java软件开发技术&#xf…

面试项目 java-服务端 18h58

以淘宝为例子介绍一下 这个架构非常之复杂&#xff0c;创业公司无法达到这样的架构&#xff0c;在当前阶段找到适合的架构 用户名唯一 横向越权 纵向越权 ftp服务器 mybatis mybatis反向工程 mybatis pageHelper 所有的东西在一个服务器上面 三台服务器单独做一个东…

Google高性能RPC框架gRPC 1.0.0发布

鉴于gRPC已进入稳定版分支&#xff0c;并对应用于生产中准备就绪&#xff0c;Google发布了gRPC 1.0。 gRPC源于被称为Stubby的Google内部项目&#xff0c;早期是用于一些Google内部服务间的通信。18个月前Google开源了gRPC框架&#xff0c;希望借此gRPC能被更广泛地采纳&#x…

java打开文件(Windows exe,应用文件exe,以及其他任何格式的文件)

转载自 java打开文件&#xff08;Windows exe,应用文件exe,以及其他任何格式的文件&#xff09; 使用java代码打开任何格式的文件 public static void main(String[] args) throws IOException { openWindowsExe(); openExe(); openFile(); } //用 Java 调用win…

新闻发布项目——接口类(commentDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.comment;/*** 新闻评论的接口* author Administrator**/ public interface commentDao {//查询public List<comment>getCommentAll();//根据id查询新闻信息public List<comment> g…