您现在的位置是:网站首页> 内容页

Nuget 多平台多目标快速自动打包

  • 九州娱乐
  • 2019-05-22
  • 54人已阅读
简介构建现代的.Net应用离不开Nuget的支持,而快速打包Nuget成了提高生产率的有效方法。1.前置条件为了实现Nuget的快速打包,我们需要先解决一些前置依赖,无论

构建现代的 .Net 应用离不开 Nuget 的支持,而快速打包 Nuget 成了提高生产率的有效方法。

1. 前置条件

为了实现 Nuget 的快速打包,我们需要先解决一些前置依赖,无论是 .Net Framework、Mono 或者 .Net Standard(.Net Core),我们都需要先编译通过,然后再打包成 Nuget 包,最后再发布到 Nuget 服务器上。

相关目标 (支持平台以及依赖):

.Net Framework (仅 Windows) : MSBuild.exe、Nuget.exeMono (跨平台) : mono、xbuild、Nuget.exe.Net Standard (跨平台) : dotnet sdk

由于大多数人还是在 Windows 上开发,所以我下面的教程会以 Windows 为标准,并旁敲侧推到其他平台。

2. 快速打包示例

2.1 Visual Studio 中快速打包

在 Visual Studio 中要实现 Nuget 的快速打包主要是借助 Visual Studio 自带的外部工具。在实战之前,我们要确保依赖都满足了。因为已经安装了 Visual Studio ,所以默认是已经安装了 MSBuild 和 Nuget 了。

其次,为了让自动打包的脚本的字符串尽量节省空间,我们会尽量将对应的依赖加到系统环境变量的 Path 路径中。一般而言,Msbuild 是在 Visual Studio 安装目录下的 Msbuild 目录中,如下图所示,在我本机地址是 "C:Program Files (x86)Microsoft Visual Studio2017EnterpriseMSBuild15.0Binamd64" ,Nuget 最好是另外放置,例如我就把它放到了 "D:ools" 目录中。

如果你足够细心,可以发现安装完 .Net Core 的 SDK 后,默认已经加到了系统的环境变量中了( Mono 也是如此)。

然后我们使用 Visual Studio 打开对应的项目,点击菜单栏中 " 工具 - 外部工具 ",添加我们自定义的自动打包发布脚本。

如上图所示,这里使用的是 powershell.exe,如果提示找不到 powershell.exe,同样是将路径添加到系统环境变量的 path 中。至于参数,可以是一个ps脚本文件,也可以是执行脚本语句,在这里使用脚本语句。初始目录选中 "目标目录" 或者 "项目目录"都可以。

从上图中,可以看出区分了目标构建,这里分布展示 .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

编写好自定义的外部工具后,以后每次打包发包都可以按一下按钮就运行了。

2.2 VSCode

VSCode 是另外一个受人欢迎的代码编辑器,目前不支持 Visual Studio 中的外部工具功能 (如果有,请告诉我),也没有扩展支持直接发布 Nuget 包,但是这并不妨碍我们实现快速自动打包并发布 Nuget 包。

VSCode 中一个有力的功能就是任务功能,我们可以通过执行任务来实现同样的效果。

2.3 文件夹右键菜单

有时候我们可能需要脱离 ide 来执行脚本,这个时候文件夹右键菜单就显得十分高效了。

具体的操作是修改 windows 的注册表,具体可以参考windows 下如何修改右键菜单 一文。

3. 结语

虽然本文着重讲了如何实现 Nuget 多平台多目标快速自动打包的小目标,但从几个示例当中就可以看到自动化脚本的威力。在 Windows 平台上开发,也是同样可以高效率的。

文章评论

Top