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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Identity Server 4 - Hybrid Flow - 使用ABAC保护MVC客户端和API资源

这个系列文章介绍的是Identity Server 4 实施 OpenID Connect 的 Hybrid Flow. 保护MVC客户端: Identity Server 4 - Hybrid Flow - MVC客户端身份验证, Identity Server 4 - Hybrid Flow - Claims保护API资源(这里用到了RBAC: Role-based Access Control 基于角色的访问权限控…

【图论】【并查集】矩形(ssl 1222)

矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形。每个矩形的边都平行于坐标轴并且都具有值为整数的顶点。我们用如下的方式来定义块。…

Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一)

图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图。那么如何在Asp.Net Core Web Api实现图片上传存储以及生成缩略图呢?今天我就使用MongoDB作为图片存储,然后使用SixLabors作为图片处理,通过一个As…

FFT算法学习笔记

写在前边 1.辣鸡RRRR_wys之前csdn的博客,千年不更。。。还很水。。。于是开了这个Blog。。。妄图拯救一下自己 2.最近接触了一些多项式理论。于是翘掉了愉快的高频自控,通过《算导》稍稍学习了一下 3.算法竞赛中,FFT主要解决多项式的乘法等问…

System.IO.Pipelines: .NET高性能IO

本文翻译自dotnet团队博客文章:https://blogs.msdn.microsoft.com/dotnet/2018/07/09/system-io-pipelines-high-performance-io-in-net/ System.IO.Pipelines是一个新的库,旨在简化在.NET中执行高性能IO的过程。它是一个依赖.NET Standard的库&#xff…

.NET+PostgreSQL实践与避坑指南

简介.NETPostgreSQL(简称PG)这个组合我已经用了蛮长的一段时间,感觉还是挺不错的。不过大多数人说起.NET平台,还是会想起跟它“原汁原味”配套的Microsoft SQL Server(简称MSSQL),其实没有MSSQL也没有任何问题,甚至没有Windows Se…

Jimu : .Net Core 分布式微服务框架介绍

一、前言近些年一直浸淫在 .Net 平台做企业应用开发,用过的 .Net 框架不多(具体数量不清,印象深刻的有 Asp.Net MVC,WPF,其他很多都是基于微软开发的框架做些封装而形成新的框架,大都是还没起好名就湮灭在历…

.NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码

前言上一篇博客中我们可以得知通过Swagger插件可以很方便的提供给接口开发者在线调试,但是实际上Swagger附带的功能还有很多,比如使用NSwag生成客户端调用代码,进一步解放接口开发者。NSwag NSwag是一个发布在GitHub上的开源项目,…

使用.NetCore 控制台演示 熔断 降级(polly)

1、熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设),现在我想用力把这根钢铁折弯,但是人的力有限达不到折弯的点,然后我使用火给钢铁加热,每隔…

给正在努力的您几条建议(附开源代码)

前言我是一名在广州的某家互联网公司工作,并有6年工作经验,奔着架构师与微软MVP为目标的老鸟程序员。最近回顾了下多年来走的路,有不少的弯路。今天不说技术,而是总结了一些职业生涯上的建议与大家分享。虽说今天不说技术&#xf…

.Net Core Cors中间件解析

同源策略和资源跨域共享1、同源策略同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。1.1、目的主要是为了保证用户信息的安全&#xff0c…

用Way.EntityDB进行Entity Framework Core数据库建模

Way.EntityDB是一个基于EF Core的数据层框架,它取消了EF Core的Migration机制,因为Migration并不是通用的,比如说sql server生成的migration,如果换成sqlite,运行时会报错的,也就是数据库不能更换。Way.Ent…

.NET Core开发日志——Runtime IDentifier

.NET Core对于传统.NET开发人员而言是既熟悉又陌生的新平台,所以有时遇上出乎意料的事情也纯属正常情况。这时只需点耐心,多查查资料,努力找到原因,也未尝不是件有意义的体验。比如当建完一个最简单的控制台应用程序:d…

Full_of_Boys训练5总结

题目来源&#xff1a;2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest A. Advertising Strategy 贪心方法&#xff1a;把一部分k放到初始值&#xff0c;剩下一部分&#xff0c;等到最后用。然后&#xff0c;枚举第一部分放多少即可。 #include <bits/stdc.h> typ…

C#语法——await与async的正确打开方式

C#5.0推出了新语法&#xff0c;await与async&#xff0c;但相信大家还是很少使用它们。关于await与async有很多文章讲解&#xff0c;但有没有这样一种感觉&#xff0c;你看完后&#xff0c;总感觉这东西很不错&#xff0c;但用的时候&#xff0c;总是想不起来&#xff0c;或者不…

好代码是管出来的——.Net Core集成测试与数据驱动测试

软件的单元测试关注是的软件最小可执行单元是否能够正常执行&#xff0c;但是软件是由一个个最小执行单元组成的集合体&#xff0c;单元与单元之间存在着种种依赖或联系&#xff0c;所以在软件开发时仅仅确保最小单元的正确往往是不够的&#xff0c;为了保证软件能够正确运行&a…

【高精】【快速幂】穿越丛林(ssl 2314)

穿越丛林 ssl 2314 题目大意&#xff1a; 求2n2^n2n 原题&#xff1a; 题目描述&#xff1a; ljj 是一位富有冒险心又很喜欢研究数学的孩纸&#xff0c;有一天&#xff0c;他到一个丛林冒险&#xff0c;这里的树长有像0、4、6、8、9这样形状的洞&#xff0c;他要想穿过丛…

谈谈surging引擎的tcp、http、ws协议和如何容器化部署

1、前言分布式已经成为了当前最热门的话题&#xff0c;分布式框架也百花齐放&#xff0c;群雄逐鹿。从中心化服务治理框架&#xff0c;到去中心化分布式服务框架&#xff0c;再到分布式微服务引擎&#xff0c;这都是通过技术不断积累改进而形成的结果。esb,网关&#xff0c;ngi…

Helm - Kubernetes服务编排的利器

Helm介绍在Kubernetes中部署容器云应用&#xff08;容器或微服务编排&#xff09;是一项有挑战性的工作&#xff0c;Helm就是为了简化在Kubernetes中安装部署容器云应用的一个客户端工具。通过Helm能够帮助开发者定义、安装和升级Kubernetes中的容器云应用。同时&#xff0c;也…

.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)

一、预备知识&#xff1a;数据一致性关于数据一致性的文章&#xff0c;园子里已经有很多了&#xff0c;如果你还不了解&#xff0c;那么可以通过以下的几篇文章去快速地了解了解&#xff0c;有个感性认识即可。&#xff08;1&#xff09;左正&#xff0c;《保证分布式系统数据一…