使用批處理根據項目工程文件生成Nuget包並發布(支持.NET Core)


最近在使用之前自己編寫的批處理給.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一下腳本,何不美哉!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM