构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提升生产率的有效方法。shell
为了实现 Nuget 的快速打包,咱们须要先解决一些前置依赖,不管是 .Net Framework、Mono 或者 .Net Standard(.Net Core),咱们都须要先编译经过,而后再打包成 Nuget 包,最后再发布到 Nuget 服务器上。json
相关目标 (支持平台以及依赖):windows
因为大多数人仍是在 Windows 上开发,因此我下面的教程会以 Windows 为标准,并旁敲侧推到其余平台。服务器
在 Visual Studio 中要实现 Nuget 的快速打包主要是借助 Visual Studio 自带的外部工具。在实战以前,咱们要确保依赖都知足了。由于已经安装了 Visual Studio ,因此默认是已经安装了 MSBuild 和 Nuget 了。并发
其次,为了让自动打包的脚本的字符串尽可能节省空间,咱们会尽可能将对应的依赖加到系统环境变量的 Path 路径中。通常而言,Msbuild 是在 Visual Studio 安装目录下的 Msbuild 目录中,以下图所示,在我本机地址是 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64" ,Nuget 最好是另外放置,例如我就把它放到了 "D:\tools" 目录中。编辑器
若是你足够细心,能够发现安装完 .Net Core 的 SDK 后,默认已经加到了系统的环境变量中了( Mono 也是如此)。ide
而后咱们使用 Visual Studio 打开对应的项目,点击菜单栏中 " 工具 - 外部工具 ",添加咱们自定义的自动打包发布脚本。工具
如上图所示,这里使用的是 powershell.exe,若是提示找不到 powershell.exe,一样是将路径添加到系统环境变量的 path 中。至于参数,能够是一个ps脚本文件,也能够是执行脚本语句,在这里使用脚本语句。初始目录选中 "目标目录" 或者 "项目目录"均可以。visual-studio
从上图中,能够看出区分了目标构建,这里分布展现 .Net Framework 和 .Net Standard 的构建脚本,其中 .Net Framework 相似这样:测试
del *.nupkg ; $roj=dir *.csproj ;msbuild $roj; nuget pack $roj ; $nupkg= dir *.nupkg; nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget
而 .Net Standard 则是:
del *.nupkg ; dotnet build ;dotnet pack --output $pwd;$nupkg= dir *.nupkg; dotnet nuget push $nupkg nugetpassword -Source http://192.168.9.1/nuget
至于运行在非 Windows 上的 Mono 则多是:
rm *.nupkg ; $roj= *.csproj ;xbuild $roj; $ver= date -d yesterday +%Y%m%d%H%M;nuget pack $roj -Suffix $ver; $nupkg= *.nupkg; mono nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget
他们共同的特征都是先删除当前路径的 nupkg 的文件,而后编译、打包、发布。(若是你没有私有的Nuget服务器,能够参考我另一篇文章)
在这个基础上能够作更多的扩展,好比发布测试版本,就在原来的基础上添加后缀,如:
del *.nupkg ; $roj=dir *.csproj ;msbuild $roj; $ver=\"beta-\"+(Get-Date).ToString(\"yyyyMMddHHmm\");nuget pack $roj -Suffix $ver; $nupkg= dir *.nupkg; nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget
编写好自定义的外部工具后,之后每次打包发包均可以按一下按钮就运行了。
VSCode 是另一个受人欢迎的代码编辑器,目前不支持 Visual Studio 中的外部工具功能 (若是有,请告诉我),也没有扩展支持直接发布 Nuget 包,可是这并不妨碍咱们实现快速自动打包并发布 Nuget 包。
VSCode 中一个有力的功能就是任务功能,咱们能够经过执行任务来实现一样的效果。
有时候咱们可能须要脱离 ide 来执行脚本,这个时候文件夹右键菜单就显得十分高效了(能够多选文件夹发布)。
具体的操做是修改 windows 的注册表,具体能够参考windows 下如何修改右键菜单 一文。
若是你以为麻烦,我这里有一个示范的注册表,修改其中Nuget push的参数为对应的Nuget服务器信息,另存为 nuget.push.reg
,双击便可导入到系统,而后重启 windows 资源管理器的进程(就是个人电脑的进程)。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Nuget] @="Nuget发布" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Nuget\command] @="powershell.exe -noexit -command Set-Location '%V' ;powershell.exe -c \"echo $pwd;del *.nupkg ;dotnet pack --output $pwd;$nupkg= dir *.nupkg; dotnet nuget push $nupkg -k 123456 -s http://192.168.1.1;\""
若是提示找不到程序,须要把 powershell.exe 添加到系统环境变量的path中。
在 Mac 中实现一样的功能须要借助 Automator 的帮助,首先是添加一个服务,选择运行shell脚本,保存的时候取一个友好的名字。
虽然本文着重讲了如何实现 Nuget 多平台多目标快速自动打包的小目标,但从几个示例当中就能够看到自动化脚本的威力。
个人博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。