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

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

1. 前置条件

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

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

  • .Net Framework (仅 Windows) : MSBuild.exe、Nuget.exe

  • Mono (跨平台) : 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 Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64" ,Nuget 最好是另外放置,例如我就把它放到了 "D:\tools" 目录中。

640?wx_fmt=png

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

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

640?wx_fmt=png

如上图所示,这里使用的是 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 中一个有力的功能就是任务功能,我们可以通过执行任务来实现同样的效果。
640?wx_fmt=png

2.3 文件夹右键菜单

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

640?wx_fmt=png

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

640?wx_fmt=png

3. 结语

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

原文地址:https://www.cnblogs.com/chenug/p/9290281.html

 
 

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值