博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用批处理根据项目工程文件生成Nuget包并发布(支持.NET Core)
阅读量:7236 次
发布时间:2019-06-29

本文共 4007 字,大约阅读时间需要 13 分钟。

最近在使用之前自己编写的批处理给.NET Core项目打包时出问题了,发现之前的脚本根本不适用了,折腾了半天,总算解决了。因此在这里分享下经验,并且奉上整理好的脚本。

Nuget包这里就不多介绍了,需要了解的请访问:

下面开始本篇教程。

下载Nuget.exe

下载地址:

注意下载最新的Nuget.exe,尤其是打包.NET Core项目时。

 

编写打包脚本

首先我们在解决方案目录下新建一个pack.bat。内容如下:

:: 包搜索字符串echo %1:: 项目方案地址echo %2:: 删除历史包del %1 /f /q /a :: 包名称set nupkg="":: 打包nuget Pack %2 -Build -Properties Configuration=Release:: 更新包名称for %%a in (dir /s /a /b "./%1") do (set nupkg=%%a):: 推送包nuget push %nupkg% {your api key} -Source https://www.nuget.org/api/v2/package

如上所示,这里需要传入两个参数。

  • %1:包搜索字符串,比如“Magicodes.Sms.*.nupkg”
  • %2:项目方案路径,比如“Magicodes.Sms/Magicodes.Sms.csproj”,注意:如果是.NET Core项目,请填写项目的“project.json”地址,比如“Magicodes.Sms/project.json”。这个问题折腾了一晚上,后面在GitHub里面找到了提示。

 

设置包属性

通常我们在搜索Nuget包时,可以看到很多描述或介绍,如下图所示:

如果是普通的.NET 库,我们可以在工程的AssemblyInfo.cs文件中设置:

[assembly: AssemblyTitle("Magicodes.WeChat.SDK")][assembly: AssemblyDescription("Magicodes.WeChat.SDK为湖南心莱信息科技有限公司基于微信业务封装的工具包,以便更便捷更简单的调用和使用微信接口,以更好地和自己的业务结合。\n官方网址:http://xin-lai.com \n开源库地址:https://github.com/xin-lai \n博客地址:http://www.cnblogs.com/codelove/ \n交流QQ群(Magicodes开源库交流群):346487194 \n小店地址:https://shop113059108.taobao.com/")][assembly: AssemblyConfiguration("")][assembly: AssemblyCompany("湖南心莱信息科技有限公司")][assembly: AssemblyProduct("Magicodes.WeChat.SDK")][assembly: AssemblyCopyright("Copyright © 2016")][assembly: AssemblyTrademark("")][assembly: AssemblyCulture("")]

同时,我们还可以设置自动版本号,即编译时自动迭代版本号:

[assembly: AssemblyVersion("1.0.*")]

 

如果是.NET Core项目,则需要通过project.json来设置:

{  "authors": [ "湖南心莱信息科技有限公司" ],  "dependencies": {    "NETStandard.Library": "1.6.1"  },  "description": "短信核心库,基于.Net Core。\n官方网址:http://xin-lai.com \n开源库地址:https://github.com/xin-lai \n博客地址:http://www.cnblogs.com/codelove/ \n交流QQ群(Magicodes开源库交流群):346487194 \n小店地址:https://shop113059108.taobao.com/",  "frameworks": {    "net461": {    }  },  "title": "Magicodes.Sms.Core",  "version": "1.0.0-*"}

.NET Core项目暂时不知如何设置自动版本号,如果有知道的朋友望不吝赐教。目前,.NET Core类库通过批处理打包会出现包属性中文乱码的问题。

 

调用脚本

首先我们得确认目录结构和相关必须文件位置是否正确,如下所示:

接下来,我们需要编写相应项目的打包调用脚本了,这里以“pack.Magicodes.Sms.bat”为例,内容如下:

call ./pack.bat "Magicodes.Sms.*.nupkg" "Magicodes.Sms/Magicodes.Sms.csproj"@pause

如果是.NET Core项目,比如以“pack.Magicodes.Sms.Core.bat”为例,内容如下:

call ./pack.bat Magicodes.Sms.Core.*.nupkg "Magicodes.Sms.Core/project.json"@pause

执行情况:

 

番外:调用第三方API通知

有时候,如果我们的包是推送到自己的服务器,或者我们希望团队中其他人知道我们推送了吊炸天的包包,但是我们又不想直接很Low的在群里@所有人 ,那么我们可以编写PowerShell脚本来处理。下面是调用纷纭(现在收费了,可以考虑发邮件代替)的例子:

Param (    ##开发消息    [string]$url = "https://hook.lesschat.com/incoming/b32181af9434465685901eb5d0a39aa2",    [string]$data = "{
""text"": ""这是一条来自于Incoming Webhook的消息。\n并且消息还可以换行。""}", [string]$username = "", [string]$password = "", [string]$responseType="string", [string]$method="POST")try{ write-host $data -ForegroundColor Green -BackgroundColor Black ###写请求数据 $bytesToPost = [text.encoding]::utf8.getBytes($data) $wc = new-object net.WebClient ###Content-Type设置为application/json $wc.Headers.Add("Content-Type","application/json") ### 设置请求凭据 if ($username.Length -gt 0 -and $password.Length -gt 0) { $wc.Credentials = New-Object System.Net.NetworkCredential($username,$password) ### Set Cookie $wc.Headers.add("Cookie", $wc.ResponseHeaders["Set-Cookie"]) } $responseData = $wc.UploadData($url,$method,$bytesToPost) $responseStr=[text.encoding]::utf8.getString($responseData) write-host $responseStr -ForegroundColor Green -BackgroundColor Black}catch [System.Net.WebException],[System.Exception] { Write-Host "出现异常,推送消息失败" -ForegroundColor Red -BackgroundColor Black}finally{ Write-Host "处理完成" -ForegroundColor White -BackgroundColor Yellow}

调用代码很简单,在包推送完成后,我们可以编写以下脚本:

set title="%nupkg%包已推送,请更新最新包。"set data="{"""attachment""":{"""text""": """%title%""","""color""": """#FFFF33""","""fallback""":"""%title%"""}}"cmd /c powershell -ExecutionPolicy RemoteSigned -noprofile -noninteractive -file "./LesschatIncoming.ps1" -data %data%

 

尾声

至此,整个批处理生成Nuget包并推送的教程就到这里结束了。通过批处理编写,我们只要双击就可以完成项目的编译打包和发布的过程,同时还可以Show一下脚本,何不美哉!

你可能感兴趣的文章
关于Vue.js和React.js,听听国外的开发者怎么说?
查看>>
4.variables
查看>>
2.sparkSQL--DataFrames与RDDs的相互转换
查看>>
鼠标放上超链接显示背景效果
查看>>
【小摘抄】关于C++11下 string各类用法(持续更新)
查看>>
淘宝Buy+九月上线测试,你说靠谱吗?
查看>>
erlang的函数
查看>>
Spring Boot入门(2)使用MySQL数据库
查看>>
支撑全网70%世界杯流量 盘点世界杯直播背后的阿里云黑科技
查看>>
JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】...
查看>>
直击云栖大会·上海峰会 | 一张图看懂首日重磅发布
查看>>
ADO:实现向Oracle数据库中插入数据
查看>>
Eclipse 和 Equinox 发布 4.11 版本,支持 Java 12
查看>>
「镁客·请讲」因诺航空胡军:无人机行业进入洗牌期,我们渴望完整的产业链...
查看>>
区块链钱包开发
查看>>
游戏公司盯上了区块链:是机会,还只是一场游戏?
查看>>
工控主板定制ARM9选择思路
查看>>
PHP实现远程下载文件到本地
查看>>
Matplotlib 中文用户指南 7.3 事件处理及拾取
查看>>
IBM新思路,让无人机照看、训练你的宝贝萌宠
查看>>