1. 创建一个Vs解决方案PackTest和一个Shape类库
2. 在解决方案目录下新建一个名为Packages的文件夹,新建.paket文件夹,将paket.exe文件放入.paket文件夹目录下,如下所示:
3. 在VS项目新建一个解决方案文件夹,我们称之为Nuget。
事实上这个nuget文件夹在硬盘上我们是看不到的。只能在vs项目上能看到,以后一些打包管理的文件我们都放在这个解决方案文件夹nuget里面:
4.我们在Nuget下面新建一个paket.template文件
这个就是我们要打包的模板:
然后在模板里面填写内容,待以后运行batch脚本能够根据这个template文件去打包
id就是我们打包后的包id
version就是生成包的名称前缀,也是版本号。接着往下看你就知道version的作用了;
author就是作者
description 即信息描述,可以描述你打包的程序或者程序集的功能
files下面的五行是你要打包的程序集或者文件,==> 前的字段(比如Debug/shape.dll)是将要被打包文件的相对路径,它们必须能找到,否则就会打包不成功。
那么dependencies文件又是什么呢?接着往下看
5. 和新建paket.template一样,我们新建一个paket.dependencies
理论上来说,这个paket.dependencies是必须存在的,因为你的程序集或者程序可能需要依赖于其他的程序集(别人写的dll),然后你在里面填写你要依赖的程序集,以及它的可下载源链接
source 后面跟你要依赖的包的源
neget下面是你依赖的程序集的名称和其版本条件,比如我这里依赖的程序集是Framework,Framework的版本必须在1.300.0.0以上,低于1.400.0.0,如果你没有要依赖的源,dependencies可以是空着的,但是文件必须要创建的。
6. 还要建立一个history.md文件
history.md文件是我们要对版本更新升级或者变更时要对版本增加了什么内容,以便别人使用你的程序集时有所了解。history的名称和内容可自由发挥,不过一般来说一个开发团队都有规定.
我们在paket.template里有声明说 history.md ==> 也就是说,以后我们打包的话,history.md也要和dll一起被打包
基本工作准备好了,接下来就是编写batch打包脚本了
7. 在Nuget文件夹下面新建一个pack.bat
我们先看设置打包参数
version这个没得说,就是和template里的version一个样
Out=pack.out 就是让Out变量为pack.out ,一会儿调用,接着看
Project=Shape 就是打包的项目
rem 分别编译Debug和Release下面的两行说的是
分别对解决方案下的项目文件都进行编译,这样才能够生成我们需要打包的程序集dll等相关文件,当然也可以打包exe文件
值得一提的是,倒数第二行
注意Packages\.paket就是上面我们把paket.exe所放在文件夹的路径,这里使用了相对路径,如果你的Packages放在了上层目录,应该使用\..来表示上层目录。 看见%Out%没,一会儿我们打好的包就会放在Out变量里面,也就是pack.out文件夹里面,packlog.txt是打包的日志,可以查看打包过程的信息
设置编译参数,就是为了去编译debug和release设置的相对路径,照抄就行
这里我们还需要在需要编译的项目,右键-属性,在预先生成事件命令添加一行call指令,一会儿脚本编译的时候,paket.exe才能启动,call "$(SolutionDir)Packages\.paket\paket.exe" install。
注意,这里的$(SolutionDir)指的是我解决方案PackTest的目录,要根据自己paket.exe所放的目录来写这个指令
8. 大功告成,现在我们可以打开解决方案所在的文件夹,直接去点击pack.bat就行了!
双击pack.bat文件
虽然多出了三个文件,但是在pack.out里面并没有发现我们要的东西,也就是打好的包!!!!
我们可以去看看日志,发现日志都提示说没有错误,也没有警告。我敲??肯定是什么地方写错了!!!
我们在pack.bat脚本中写入pause(暂停),去看看脚本运行到哪个地方中断了!!
发现运行的脚本有个提示,下图红框
这段信息说我们的dll是找不到!!! paket.template模板的打包信息写错了!!!
我们去看看paket.template的打包信息
上图paket.template中files下,说的是dll放在paket.template同级目录下的Dubug文件夹下面,然而在去查看paket.templage所在目录下并没有Debug文件夹!!!!
那么我们编译的dll放在哪里呢?