如何從零開發一個NuGet軟體包?

依樂祝發表於2020-12-23

作者:依樂祝
首發地址:https://www.cnblogs.com/yilezhu/p/14175019.html

我想目前每個.net開發人員都應該知道nuget.org和NuGet軟體包吧。但是,您是否曾經嘗試並建立過一個nuget包呢?Nuget軟體包比較容易引入到類庫中。因此,可以使用NuGet軟體包管理器將nuget軟體包新增到任何專案中。

Nuget包的剖析

Nuget軟體包不僅是dll檔案。NuGet包是可移植的,它包含您要放入.Net專案中的所有內容。您可以在其中放置txt檔案或png檔案。這就是為什麼我們稱它們為“包裹”。您可以打包一些開發檔案,並將它們以.nupkg格式在專案之間移動。
我剛剛解壓縮了InputKit的nuget包,您可以在下圖中看到nupkg檔案的樹狀檢視。

因此,只需檢視其中的資料夾和檔案。
icon.png:
這是您的NuGet包的圖示檔案。現在已將其嵌入.nupkg中,但在早期版本的NuGet中只能定義為url。
.nuspec
nuspec是關於nuget包的後設資料檔案。在早期版本中,它曾經用於打包nuget包。但是在新的dotnet CLI中,此檔案是由roslyn編譯器從您的.csproj檔案生成的。它包括軟體包的目標框架,名稱,許可證,圖示,標籤,與其他包的依賴關係以及其中描述的要放置到新增的專案中的靜態檔案。
[Content_Types] .xml:
這是一個後設資料檔案,提供了程式包中包含的每個副檔名。
lib:
軟體包的主資料夾。此資料夾包括您的構建輸出。換句話說,它在構建之後包含了bin資料夾。所以您可以看到不同目標框架的資料夾與專案輸出相同。例如,如果您的.csproj檔案是多目標的,您可以像我一樣看到每個目標框架的資料夾。
package:
此資料夾包含有關您的包的更多後設資料檔案。此資料與您在nuget軟體包列表中看到的資料相同:“建立者”,“描述”,“識別符號”,“版本”和“關鍵字”。
_rels / .rels:
這是xml格式的副檔名,由Microsoft建立和使用。您可以從此處檢視有關.rels格式的更多資訊。它主要用於Microsoft Office。

建立你的第一個庫

每一個開發者都應該知道類庫。它們很難移動或用於不同的專案。因為它們的輸出是dll檔案。在本文中,我不會談論如何構建庫。我將展示如何將它們轉換為可移植的nuget包。因此,讓我們從第一步開始。
1-選擇目標框架
選擇目標框架是非常重要!只需計劃你的專案並定義依賴項即可。如果您的依賴項需要.net core(如實體框架)或以.Net core為目標的物件,只需將目標框架選為“.Net core”。但如果不是,請始終嘗試在“.Net Standard”上構建庫。順便說一句,你可以建立一個多目標專案。您可以從此處閱讀有關多目標專案的更多資訊。
2-填充後設資料
在我們所處的時代,MetaData是最重要的事情。MetaData可以更輕鬆地找到您的包裹並最好地描述其作用。因此,請正確填寫您的後設資料。在Visual Studio中建立類庫後,只需右鍵單擊並轉到屬性。您可以在“打包”標籤下看到所有可以填寫的欄位。
如果您的環境不是Visual Studio,則可以直接修改.csproj檔案,如下所示。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>My.Package</PackageId>
    <Version>1.0.1</Version>
    <Authors>enisn</Authors>
    <Company>enisn</Company>
    <Product>My Package</Product>
    <Description>This is my packages description.</Description>
    <Copyright>All rights reserved</Copyright>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <PackageProjectUrl>https://github.com/enisn/MyPackage</PackageProjectUrl>
    <RepositoryUrl>https://github.com/enisn/MyPackage</RepositoryUrl>
    <PackageTags>my,awesome,package</PackageTags>
    <PackageReleaseNotes>Hot fixes</PackageReleaseNotes>
  </PropertyGroup>

</Project>

3-打包!
這就是奇蹟發生的地方!準備好你的程式碼,右鍵單擊您的專案,然後單擊“打包”按鈕。您的nupkg檔案將在您專案的bin資料夾中等待著您。
如果您的開發環境不是Visual Studio,則可以使用命令提示符來執行此操作,如下所示:

dotnet pack My.Package.csproj

4-與全世界分享!
轉到nuget.org並登入到你的帳戶。然後導航到“釋出”選項卡,並將您的.nupkg檔案拖放到該頁面中。填寫有關包裹的資訊欄位並提交。僅此而已!這是在nuget.org上釋出軟體包的最簡單方法。
使用命令列工具
但是您也可以在命令列下執行此操作。讓我們來看看這種方式。
首先,您需要一個Api-Key與nuget API通訊。轉到nuget.org上的個人資料,然後找到“ API金鑰”部分,如下所示。

建立一個API金鑰並儲存它。您將無法再次看到它。因此,您需要儲存它。
現在,從打包開始,然後您可以通過CLI進行推送。
dotnet pack --configuration Release -o .packages/
這意味著在釋出模式下構建專案,並將輸出檔案放置到“ .packages”資料夾中。因此,我們可以輕鬆地從.pacakges資料夾中找到輸出。因此,您的nupkg檔案已準備好推送。使用以下命令將軟體包推送到nuget.org或您自定義的源:
dotnet nuget push .\.packages\My.Pacakge.1.0.1.nupkg --source [https://api.nuget.org/v3/index.json](https://api.nuget.org/v3/index.json) --api-key YOUR_API_KEY --skip-duplicate
我使用了 skip-duplicate 引數,因為如果要配置 CI ,則可以多次推送相同版本的軟體包,而如果要推送已經存在的版本,則會出現錯誤,並且 CI-CD 程式將失敗。因此,使用 skip-duplicate 引數忽略已存在的版本推送,併成功完成操作。
感謝您的閱讀,我們下篇文章見!
翻譯自:https://enisn.medium.com/how-to-develop-a-nuget-package-d37400d9e1d3

相關文章