【原創】使用批處理腳本自動生成並上傳NuGet包

  Hello 你們好,我是TANZAME,咱們又見面了。git

  NuGet 是什麼這裏就再也不重複囉嗦,園子裏一搜一大把。今天要跟你們分享的是,在平常開發過程當中如何統一管理咱們的包,如何經過批處理腳本生成包並自動上傳到 NuGet。在實際項目開發過程當中咱們要上傳本身的包,通常的步驟都是:nuget spec => nuget pack => nuget push,一個包都要至少重複三個動做,若是有 N 個包那就要重複 N*3 次,想一想都不能忍,因此便有了今天的分享主題。github

  • 生成目錄

  既然是統一管理,生成的包天然是放在同一個文件夾,而不是分散在各個 .proj 目錄裏。這裏咱們在解決方案所在目錄新建一個目錄,這樣作的目的是方便 bat 腳本找到解決方案下面的子項目。好比我這裏新建的是 .nuget 這個目錄,須要注意的是若是目錄名稱有特殊字符的話不能直接右鍵新建,須要用命令提示符,直接在解決方案所在目錄使用快捷鍵 SHIFT + 右鍵 就能直接打開命令提示符,這樣能夠省去一大堆 cd 的操做。express

 

  • 下載 NuGet

  到 NuGet 官網下載命令行接口(CLI)。nuget.exe提供了完整的 nuget 功能, 可用於安裝、建立、發佈和管理包, 而無需對項目文件進行任何更改。json

  1. 請訪問 nuget.org/downloads,並選擇 NuGet 3.3 或更高版本(2.8.6 與 Mono 不兼容)。 始終建議使用最新版。若要將包發佈到 nuget.org,版本至少必須是 4.1.0。
  2. 每次下載都直接下載 nuget.exe 文件。 讓瀏覽器將文件保存到選定文件夾。 此文件不 是安裝程序;若是直接在瀏覽器中運行,就不會看到任何內容。
  3. 將文件夾添加到 nuget.exe 中放置 PATH 環境變量的位置,這樣就能夠從任意位置使用 CLI 工具。這裏咱們把它放在上一步新建的 .nuget 文件夾下面,並設置 PATH 環境變量。

 

  • 生成清單

  .nuspec文件是包含包元數據的 XML 清單, 此清單同時用於生成包以及爲使用者提供信息。這個清單文件咱們只須要生成一次,之後都不須要再從新生成。 .net Core 和使用sdk 特性.NET Standard 項目不須要 .nuspec 文件,若是是.net Core 和使用sdk 特性.NET Standard 項目則忽略此步驟。轉到項目所在目錄,SHIFT + 右鍵 調出命令提示符,輸入 nuget spec 命令便可生成咱們所須要的包元數據清單。api

 

  將這個清單文件剪切到第一步新建的 .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 腳本戳這 裏,直接上代碼片斷。
app

  1. 這裏我設置 nuget pack 包屬性爲Release,而且不自動生成,因此須要先在 Release 模式下編譯完成再運行腳本。加上 -Build 參數的話輸出的信息太多看得賊難受,這裏把它去掉,咱們本身手動編譯。
  2. 填充api_key。去 nuget 官網 登陸本身的賬號並建立一個 key,複製粘貼到 api_key 變量。
  3. 注意 .net framework 項目(fx)和 .net core 項目使用的命令不同
  4. 至此咱們全部的準備步驟都已完成,雙擊 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

  最後貼一張最終運行的效果圖:工具

  • 總結

   經過這個腳本,咱們能夠在一個文件夾裏統一管理咱們的包,作到一鍵生成、上傳同時保持項目文件的清爽,嗯簡直不要太方便 ~..~ui

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

   技術交流羣:816425449

相關文章
相關標籤/搜索