好,回归正题。但是我们都知道,图形化最大的问题就是自动化不高。
这是我其中的一个 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 包。
按这里就可以了。
到最后一步我们已经使用批处理来做了,那么可以再玩的花样就多去了,例如用 PowerShell 来自动化包的版本。在项目的 AssemblyInfo.cs 有一个 AssemblyVersion 的 Attribute,然后我们就可以用 PowerShell 来先读取这个版本号,然后修改 nuspec 文件里的 version 节点,再生成包。其实我现在就已经是这么做了,鉴于我 PowerShell 也没学过,那段代码就不放出来丢脸了。大家可以发散思维,期望在 nuget 上能看见园友发布的包包。
新闻热点
疑难解答