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

简介: 最近在使用之前自己编写的批处理给.NET Core项目打包时出问题了,发现之前的脚本根本不适用了,折腾了半天,总算解决了。因此在这里分享下经验,并且奉上整理好的脚本。 Nuget包这里就不多介绍了,需要了解的请访问:https://docs.microsoft.com/zh-cn/nuget/ 下面开始本篇教程。

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

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

下面开始本篇教程。

下载Nuget.exe

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

注意下载最新的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包时,可以看到很多描述或介绍,如下图所示:

image

如果是普通的.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类库通过批处理打包会出现包属性中文乱码的问题。

 

调用脚本

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

image

接下来,我们需要编写相应项目的打包调用脚本了,这里以“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

执行情况:

image

 

番外:调用第三方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一下脚本,何不美哉!

目录
相关文章
|
1月前
|
存储 开发框架 JSON
ASP.NET Core OData 9 正式发布
【10月更文挑战第8天】Microsoft 在 2024 年 8 月 30 日宣布推出 ASP.NET Core OData 9,此版本与 .NET 8 的 OData 库保持一致,改进了数据编码以符合 OData 规范,并放弃了对旧版 .NET Framework 的支持,仅支持 .NET 8 及更高版本。新版本引入了更快的 JSON 编写器 `System.Text.UTF8JsonWriter`,优化了内存使用和序列化速度。
|
5天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
27天前
|
开发框架 .NET 测试技术
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
本文介绍了 `.NET 9` 中新推出的 `Microsoft.AspNetCore.OpenApi` 包,该包旨在为 `ASP.NET Core` 应用程序生成 `OpenAPI` 文档。文章对比了 `NSwag` 和 `Swashbuckle.AspNetCore` 两大现有库,探讨了新包的优势和不足,特别是在性能和功能方面。尽管新包在某些方面尚不及成熟库完善,但其对原生 `AoT` 编译的支持和未来的扩展潜力使其成为一个值得考虑的选择。文章还提供了详细的性能测试数据和优化建议,适合对 `OpenAPI` 文档生成感兴趣的开发者阅读。
63 3
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
|
5天前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
1月前
|
开发框架 前端开发 API
C#/.NET/.NET Core优秀项目和框架2024年9月简报
C#/.NET/.NET Core优秀项目和框架2024年9月简报
|
1月前
|
开发框架 JavaScript 前端开发
一个适用于 ASP.NET Core 的轻量级插件框架
一个适用于 ASP.NET Core 的轻量级插件框架
|
1月前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
1月前
|
存储 消息中间件 前端开发
.NET常见的几种项目架构模式,你知道几种?
.NET常见的几种项目架构模式,你知道几种?
|
1月前
|
边缘计算 开发框架 人工智能
C#/.NET/.NET Core优秀项目和框架2024年8月简报
C#/.NET/.NET Core优秀项目和框架2024年8月简报
|
1月前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始