1. 程式人生 > 程式設計 >使用批處理指令碼自動生成並上傳NuGet包(操作方法)

使用批處理指令碼自動生成並上傳NuGet包(操作方法)

  Hello 大家好,我是TANZAME,我們又見面了。

  NuGet是什麼這裡就不再重複囉嗦,園子裡一搜一大把。今天要跟大家分享的是,在日常開發過程中如何統一管理我們的包,如何通過批處理指令碼生成包並自動上傳到 NuGet。在實際專案開發過程中我們要上傳自己的包,一般的步驟都是:nuget spec => nuget pack => nuget push,一個包都要至少重複三個動作,如果有 N個包那就要重複 N*3次,想想都不能忍,所以便有了今天的分享主題。

生成目錄

  既然是統一管理,生成的包自然是放在同一個資料夾,而不是分散在各個 .proj目錄裡。這裡我們在解決方案所在目錄新建一個目錄,這樣做的目的是方便 bat指令碼找到解決方案下面的子專案。比如我這裡新建的是 .nuget這個目錄,需要注意的是如果目錄名稱有特殊字元的話不能直接右鍵新建,需要用命令提示符,直接在解決方案所在目錄使用快捷鍵 SHIFT +右鍵就能直接開啟命令提示符,這樣可以省去一大堆 cd的操作。

下載 NuGet

  到 NuGet 官網下載命令列介面(CLI)。nuget.exe提供了完整的 nuget 功能,可用於安裝、建立、釋出和管理包,而無需對專案檔案進行任何更改。

  • 請訪問nuget.org/downloads,並選擇 NuGet 3.3 或更高版本(2.8.6 與 Mono 不相容)。始終建議使用最新版。若要將包釋出到 nuget.org,版本至少必須是 4.1.0。
  • 每次下載都直接下載nuget.exe檔案。讓瀏覽器將檔案儲存到選定資料夾。此檔案不 是安裝程式;如果直接在瀏覽器中執行,就不會看到任何內容。
  • 將資料夾新增到nuget.exe中放置 PATH 環境變數的位置,這樣就可以從任意位置使用 CLI 工具。這裡我們把它放在上一步新建的 .nuget資料夾下面,並設定 PATH環境變數。

生成清單

  .nuspec檔案是包含包元資料的 XML 清單, 此清單同時用於生成包以及為使用者提供資訊。這個清單檔案我們只需要生成一次,以後都不需要再重新生成。.net Core 和使用sdk 特性.NET Standard 專案不需要 .nuspec 檔案,如果是.net Core 和使用sdk 特性.NET Standard 專案則忽略此步驟。轉到專案所在目錄,SHIFT +右鍵調出命令提示符,輸入 nuget spec命令即可生成我們所需要的包元資料清單。

  將這個清單檔案剪下到第一步新建的 .nuget資料夾,剪下過去後專案下面就不會憑空多出一個檔案,看著清爽多了。然後做一下調整填入我們自己專案的相關資訊, 比如像下面這樣:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd">
 <metadata>
 <id>TZM.XFramework</id>
 <version>$version$</version>
 <title>$title$</title>
 <authors>$author$</authors>
 <owners>$author$</owners>
 <license type="expression">Apache-2.0</license>
 <projectUrl>https://github.com/TANZAME/TZM.XFramework</projectUrl>
 <iconUrl>http://go.microsoft.com/fwlink/?LinkID=386613</iconUrl>
 <description>TZM.XFramework is a lightweight and high performance object-relational mapper for .NET use the original Entity Framework api.</description>
 <copyright>Copyright 2019</copyright>
 <tags>.NET SqlServer MSSQL Database Data O/RM ADO.NET</tags>
 <repository type="git" url="https://github.com/TANZAME/TZM.XFramework" />
 <dependencies />
 <frameworkAssemblies>
  <frameworkAssembly assemblyName="System.Data"/>
  <frameworkAssembly assemblyName="System.ComponentModel.DataAnnotations"/>
  <frameworkAssembly assemblyName="System.Net.Http"/>
 </frameworkAssemblies>
 </metadata>
</package>

編寫指令碼

  在第一步新建的資料夾裡新建一個 bat檔案,重新命名為 package.bat,接下來編寫我們的自動指令碼。完整 bat指令碼戳這裡,直接上程式碼片段。

  • 這裡我設定 nuget pack 包屬性為Release,並且不自動生成,所以需要先在 Release 模式下編譯完成再執行指令碼。加上 -Build 引數的話輸出的資訊太多看得賊難受,這裡把它去掉,我們自己手動編譯。
  • 填充api_key。去 nuget 官網 登入自己的帳號並建立一個 key,複製貼上到 api_key 變數。
  • 注意 .net framework 專案(fx)和 .net core 專案使用的命令不一樣至此我們所有的準備步驟都已完成,雙擊 package.bat 執行指令碼,解放雙手。
@echo off
set api_key=xxxxxxlef2j57rw4q26qcrvycvznyvcurgfxbzxxxxxxxx
set source_api_uri=https://api.nuget.org/v3/index.json
set startup_dir=%~dp0
cd ..\
set startup_dir=%cd%
cd .nuget
:: 打包 TZM.XFramework -Build
echo pack TZM.XFramework
copy TZM.XFramework.nuspec %startup_dir%\net45\TZM.XFramework
nuget pack %startup_dir%\net45\TZM.XFramework\TZM.XFramework.csproj -Properties Configuration=Release
del %startup_dir%\net45\TZM.XFramework\TZM.XFramework.nuspec
echo=
:: 打包 TZM.XFrameworkCore
echo pack TZM.XFrameworkCore
dotnet pack --no-build --configuration Release --output %startup_dir%\.nuget\ %startup_dir%\netcore\TZM.XFrameworkCore\TZM.XFrameworkCore.csproj

:: 批量推送包
for /R %cd% %%f in (*.nupkg) do ( 
echo=
dotnet nuget push %%f -k %api_key% -s %source_api_uri%
)
echo=
pause

  最後貼一張最終執行的效果圖:

總結

 通過這個指令碼,我們可以在一個資料夾裡統一管理我們的包,做到一鍵生成、上傳同時保持專案檔案的清爽,嗯簡直不要太方便 ~..~

  參考資料:https://docs.microsoft.com/zh-cn/nuget/

以上所述是小編給大家介紹的使用批處理指令碼自動生成並上傳NuGet包,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!