对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的。关于这个图形化的 nuget 包管理软件的使用,博客园内有相关的文章,大家可以搜索看看。

好,回归正题。但是我们都知道,图形化最大的问题就是自动化不高

这是我其中的一个 nuget 包,可以看见里面的文件还是比较多的,那么我每一次重新编译,需要发布新版本的时候,就得把里面大部分的文件都替换成新的文件。每次都一个一个的替换,烦啊。而且有时候还得担心有没有替换少了。那么自动化打包肯定是值得研究研究一番了。

在 nuget 官网上面我们可以找到一篇关于如何创建 nuget 包的教程:https://docs.nuget.org/Create/Creating-and-Publishing-a-Package

那么我们先下载这个命令行工具下来。

然后准备我们需要打包的文件(就是 dll 之类的东西)。

看了下文档,说是支持读取直接 csproj 文件打包,那我们先试一下吧,毕竟程序员的准则就是能简单就简单,能懒就懒。

这里我的项目结构是这样的:

然后我们运行 cmd 并输入命令

报了个错,重新生成一下项目吧,再次运行。

好像成了,看看目录。

但是这 dll 所属的分类,错了吧,我建的可是 Win10 应用程序的 dll。。。

既然 csproj 方案不行的话,我们继续看文档。看见有一个通过描述 nuget 包的方案:https://docs.nuget.org/Create/Creating-and-Publishing-a-Package#create-the-manifest

要建立这么一个描述文件也很简单,跑个命令

然后我们用文本编辑器来打开这个新的 Package.nuspec 文件。

可以看见是一个 xml 文件,然后修改下里面的属性就可以了。

再次执行。

有警告,简单看了下,是说不知道应该打包哪些文件。

那么继续找找文档,最后我们可以发现这个。

修改下我们的 nuspec 文件。

新加上红色部分,也就是将这个 dll 打包进 nuget 包的 lib\uap10.0\ 这个目录里面。

再次执行打包命令。

这次没警告了。

而且包的结构也没问题。

那么只要编写好 nuspec 里面的 files 节点的话,以后执行 nuget pack XX.nuspec 这个命令的话,就能够简单地生成 nuget 包了。

为了再懒一点,我们将上面这个命令弄成批处理。

%~dp0nuget.exe pack %~dp0Package.nuspec -OutputDirectory %~dp0

%~dp0 这个是获取当前正在执行的这个 bat 文件的所在目录。

那么最后就变成这样:

确保这三个文件放在一起,然后执行 package.bat 就能在当前目录生成 nuget 包了。

接下来我们就可以发布 nuget 包了,用命令也行,但保障一点,我还是用 GUI 工具来发布(毕竟发布前再检查一次还是有必要的)。

用 Nuget Package Explorer 打开上面生成的那个 nuget 包。

按这里就可以了。

注意:一旦发布,nuget 上的包是不能够删除的!!只能隐藏,因此,请确保无误再发布。

这里是分割线

到最后一步我们已经使用批处理来做了,那么可以再玩的花样就多去了,例如用 PowerShell 来自动化包的版本。在项目的 AssemblyInfo.cs 有一个 AssemblyVersion 的 Attribute,然后我们就可以用 PowerShell 来先读取这个版本号,然后修改 nuspec 文件里的 version 节点,再生成包。其实我现在就已经是这么做了,鉴于我 PowerShell 也没学过,那段代码就不放出来丢脸了。大家可以发散思维,期望在 nuget 上能看见园友发布的包包

使用命令行打包 nuget 包的更多相关文章

  1. 命令行打包war包

    输入jar -cvf  包名.war  目录/*

  2. android 7.0 多渠道打包 - 美团开源工具Walle 命令行打包

    在Android 7.0(Nougat)推出了新的应用签名方案APK Signature Scheme v2后,之前快速生成渠道包的方式(美团Android自动化之旅-生成渠道包)已经行不通了,对此美 ...

  3. 韩顺平细说Servlet视频系列意外收获之用命令行编译带有包的java类解决方案

    命令行编译带有包的java类 在命令行编译这一块,基本上都是新手入门时了解一下,然后就直奔IDE而去.这样固然没错,就怕那些--.然后今天在视频中看到了这种方法,觉得可能会用到,所以就记录下来了,以备 ...

  4. mac下使用命令行打包出现bash gradle command not found的解决方案

    命令行打包的时候出现 bash gradle command not found这个问题,主要是因为gradle环境丢失.需要重新配置gradle的环境变量. 1. gradle路径的查找 然后gra ...

  5. Linux下基于命令行的抓包方法

    大家可能都已经对著名的抓包工具Ethereal比较熟悉了,这里再介绍一种基于命令行的抓包工具tcpdump. 举例:抓本机1813端口上的数据,并将抓包结果保存在test.cap文件中 然后在本地可以 ...

  6. Java命令行启动jar包更改默认端口以及配置文件的几种方式

    Java命令行启动jar包更改默认端口以及配置文件的几种方式 java -jar xxx.jar --server.port=8081 默认如果jar包没有启动文件,可以采用这种方式进行启动 java ...

  7. C语言基于窗体命令行打包,解包和浏览程序

    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#inc ...

  8. 搭建本地Nuget服务器并使用NuGet Package Explorer工具打包nuget包

    1.什么是Nuget: 百度百科描述: Nuget是 ASP .NET Gallery 的一员.NuGet 是免费.开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库. ...

  9. Linux java 命令行编译 jar包

    Java 命令行编译成class,然后在打包成jar文件. 编译成class javac -classpath $CLASS_PATH -d class ./src/Hello.java 可以通过ja ...

随机推荐

  1. Python 中docx转pdf

    #第一种import comtypes.clientdef convertDocxToPDF(infile,outfile): wdFormatPDF = 17 word = comtypes.cli ...

  2. nginx fastcgi负载均衡

    当后端某机器无法连接,或者处理fastcgi请求时异常退出,nginx会将fastcgi请求发送到另外一台机器. 配置文件 http { include mime.types; default_typ ...

  3. Mercurial和Git的主要区别(zz)

    Mercurial和Git的主要区别 17 August 2008 1.Mercurial用Python开发,Git用C开发,相对来说,Git比较快,但是Mercurial的性能也不差 2.Mercu ...

  4. Linux常见目录使用区别

    /bin 在有的Unix和Linux系统中是/usr/bin的链接,不过UBuntu系统是两个独立的目录./bin 存放系统管理员和普通用户都要使用的程序. /sbin 存放用于系统恢复,系统启动,系 ...

  5. python ui学习过程,使用pyqt5实现

    首先安装pyqt5的包,然后打开notebook就可以编写了.当然这样编写,也可以用designer进行. 它是pyqt5-tools的一个exe软件,\Anaconda3\Lib\site-pack ...

  6. trunc()用法和add_months()

    TRUNC函数用于对值进行截断. 用法有两种:TRUNC(NUMBER)表示截断数字,TRUNC(date)表示截断日期. (1)截断数字: 格式:TRUNC(n1,n2),n1表示被截断的数字,n2 ...

  7. oracle undo表空间

    查询undo表空间状态 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status; Undo表空间的状态( ...

  8. 2018.10.29 bzoj1023: [SHOI2008]cactus仙人掌图(仙人掌+单调队列优化dp)

    传送门 求仙人掌的直径. 感觉不是很难. 分点在环上面和不在环上分类讨论. 不在环上直接树形dpdpdp. 然后如果在环上讨论一波. 首先对环的祖先有贡献的只有环上dfsdfsdfs序最小的点. 对答 ...

  9. Linux 的虚拟文件系统(强烈推荐)

    1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux 中的任意文件进行操作而无需考虑其所在的具体文件系 ...

  10. 整合Spring+Struts2+Mybatis加spring单元测试等

    前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...