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

Nuget包这里就不多介绍了,需要了解的请访问:https://docs.microsoft.com/zh-cn/nuget/

下面开始本篇教程。

下载Nuget.exe

下载地址:https://www.nuget.org/

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

编写打包脚本

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

  1. :: 包搜索字符串
  2. echo %1
  3. :: 项目方案地址
  4. echo %2
  5.  
  6. :: 删除历史包
  7. del %1 /f /q /a
  8.  
  9. :: 包名称
  10. set nupkg=""
  11.  
  12. :: 打包
  13. nuget Pack %2 -Build -Properties Configuration=Release
  14.  
  15. :: 更新包名称
  16. for %%a in (dir /s /a /b "./%1") do (set nupkg=%%a)
  17.  
  18. :: 推送包
  19. 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文件中设置:

  1. [assembly: AssemblyTitle("Magicodes.WeChat.SDK")]
  2. [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/")]
  3. [assembly: AssemblyConfiguration("")]
  4. [assembly: AssemblyCompany("湖南心莱信息科技有限公司")]
  5. [assembly: AssemblyProduct("Magicodes.WeChat.SDK")]
  6. [assembly: AssemblyCopyright("Copyright © 2016")]
  7. [assembly: AssemblyTrademark("")]
  8. [assembly: AssemblyCulture("")]

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

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

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

  1. {
  2. "authors": [ "湖南心莱信息科技有限公司" ],
  3. "dependencies": {
  4. "NETStandard.Library": "1.6.1"
  5. },
  6. "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/",
  7. "frameworks": {
  8. "net461": {
  9. }
  10. },
  11. "title": "Magicodes.Sms.Core",
  12. "version": "1.0.0-*"
  13. }

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

调用脚本

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

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

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

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

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

执行情况:

番外:调用第三方API通知

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

  1. Param (
  2. ##开发消息
  3. [string]$url = "https://hook.lesschat.com/incoming/b32181af9434465685901eb5d0a39aa2",
  4. [string]$data = "{""text"": ""这是一条来自于Incoming Webhook的消息。\n并且消息还可以换行。""}",
  5. [string]$username = "",
  6. [string]$password = "",
  7. [string]$responseType="string",
  8. [string]$method="POST"
  9. )
  10.  
  11. try
  12. {
  13. write-host $data -ForegroundColor Green -BackgroundColor Black
  14. ###写请求数据
  15. $bytesToPost = [text.encoding]::utf8.getBytes($data)
  16. $wc = new-object net.WebClient
  17.  
  18. ###Content-Type设置为application/json
  19. $wc.Headers.Add("Content-Type","application/json")
  20.  
  21. ### 设置请求凭据
  22. if ($username.Length -gt 0 -and $password.Length -gt 0)
  23. {
  24. $wc.Credentials = New-Object System.Net.NetworkCredential($username,$password)
  25. ### Set Cookie
  26. $wc.Headers.add("Cookie", $wc.ResponseHeaders["Set-Cookie"])
  27. }
  28. $responseData = $wc.UploadData($url,$method,$bytesToPost)
  29. $responseStr=[text.encoding]::utf8.getString($responseData)
  30. write-host $responseStr -ForegroundColor Green -BackgroundColor Black
  31. }
  32. catch [System.Net.WebException],[System.Exception]
  33. {
  34. Write-Host "出现异常,推送消息失败" -ForegroundColor Red -BackgroundColor Black
  35. }
  36. finally
  37. {
  38. Write-Host "处理完成" -ForegroundColor White -BackgroundColor Yellow
  39. }

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

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

尾声

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

使用批处理根据项目工程文件生成Nuget包并发布(支持.NET Core)的更多相关文章

  1. 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何

    基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...

  2. 基于.net core实现项目自动编译、并生成nuget包

    近期想对自己的项目增加自动编译并生成nuget包,网上资料不少.但总还有迷糊的时候.首先:此解决方案包含多种版本的项目,如:有编译必须是x86平台,以及还有传统的.net foramework项目,以 ...

  3. 在VS中自动生成NuGet包以及搭建自己的或单位内部的NuGet服务器

    关于NuGet的介绍已经很多,可以参考下面的: NuGet学习笔记(1)--初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ NuGet学习笔记(2) ...

  4. 一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 & 发布

    一个技术汪的开源梦 —— 目录 微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 ...

  5. 【ASP.NET】VS编译成功后自动生成Nuget包

    在VisualStudio项目中,可以在每次编译成功后自动发布nuget包,具体配置过程如下:   1.下载nuget.exe,放置在Visual Studio项目的根目录下.   2.通过命令行生成 ...

  6. .Net core 如何生成Nuget包

    以前引用了很多neget包,觉得nuget包方便了很多,是不是有些通用的代码可以封装到nuget中,想要用的时候引用就可以了, 这样其实有两个好处: 1. 首先不用重复的coding,节约了时间. 2 ...

  7. 如何运行spring项目,并打成jar包进行发布

    一.创建spring项目 1.创建项目 2.创建moudule,选择java类型即可. 3.创建lib文件,引入spring的4个核心包spring-beans.spring-context.spri ...

  8. ios SourceTree中添加git项目工程文件

    1.创建远程git仓库 2.复制远程仓库地址,最好选择http的地址. 3.在自己的电脑上下载一个SourceTree,然后在自己的电脑上建立链接. 点击左上角的+号桶开始添加,弄好点击Clone 4 ...

  9. AndroidStudio工程文件导入Jar包和So第三方库

    AndroidStudio 导入Jar包和第三方So库 在android开发中,需要导入许多第三方的jar包和so库来支持,包括像许多第三方的支持平台--友盟,环信.融云.极光推送.微博.腾讯等第三方 ...

随机推荐

  1. 反射技术在Android中的应用

    本博客转自:http://blog.csdn.net/tiefeng0606/article/details/51700866 动态语言: 一般认为在程序运行时,允许改变程序结构或变量类型,这种语言称 ...

  2. iOS的横屏(Landscape)与竖屏(Portrait)InterfaceOrientation

    http://www.molotang.com/articles/1530.html 接着上篇写的触摸事件,这次借机会整理下iOS横屏和竖屏的翻转方向支持,即InterfaceOrientation相 ...

  3. LPC2478的SPI使用

    LPC2478的spi使用 LPC2748具有一个SPI控制器,可以当做SPI主机或者从机使用,有以下特性 其使用起来很方便,并且支持中断,使用的寄存器如下 基本上,使用起来就是设置控制为,CPOL ...

  4. “&”详解

    1.引用 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. &作为引用的时候,必须在定义时候就进行初始化,若不进行初始化则会编译报错. 2.取地址 &作为取地 ...

  5. C# 计算文件的HASH

    /// <summary> /// 提供用于计算指定文件哈希值的方法 /// <example>例如计算文件的MD5值: /// <code> /// String ...

  6. IOS开发中AVFoundation中AVAudioPlayer的使用

    IOS开发中如何调用音频播放组件 1.与音频相关的头文件等都在AVFoundation.h中,所以第一步是添加音频库文件: #import <AVFoundation/AVFoundation. ...

  7. ios页面跳转

    reference:http://blog.csdn.net/engandend/article/details/11706323 目前,就我所学到的内容,页面跳转有三种方法 一.直接推到下一个页面 ...

  8. Scott用户的四张表:

    Scott用户的四张表: 转载:http://www.cnblogs.com/mchina/archive/2012/09/06/2649951.html 在Oracle的学习之中,重点使用的是SQL ...

  9. java判断是否为汉字

    java判断是否为汉字   public static boolean isChinese(String str) { String regEx = "[\u4e00-\u9fa5]&quo ...

  10. SQL数据库置疑修复

    SQL数据库置疑修复 首先分析数据库置疑的原因,查明原因分析数据库置疑修复的方法,解决置疑后,考虑数据库置疑的预防方案.   数据库置疑产生的原因: 1.sql所在分区空间是否够?数据库文件大小是否达 ...