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


作者:依樂祝
首發地址: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


免責聲明!

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



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