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

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

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

Nuget包的剖析

Nuget軟件包不只是dll文件。NuGet包是可移植的,它包含您要放入.Net項目中的全部內容。您能夠在其中放置txt文件或png文件。這就是爲何咱們稱它們爲「包裹」。您能夠打包一些開發文件,並將它們以.nupkg格式在項目之間移動。
我剛剛解壓縮了InputKit的nuget包,您能夠在下圖中看到nupkg文件的樹狀視圖。github

所以,只需查看其中的文件夾和文件。
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。json

建立你的第一個庫

每個開發者都應該知道類庫。它們很難移動或用於不一樣的項目。由於它們的輸出是dll文件。在本文中,我不會談論如何構建庫。我將展現如何將它們轉換爲可移植的nuget包。所以,讓咱們從第一步開始。
1-選擇目標框架
選擇目標框架是很是重要!只需計劃你的項目並定義依賴項便可。若是您的依賴項須要.net core(如實體框架)或以.Net core爲目標的對象,只需將目標框架選爲「.Net core」。但若是不是,請始終嘗試在「.Net Standard」上構建庫。順便說一句,你能夠創建一個多目標項目。您能夠今後處閱讀有關多目標項目的更多信息。
2-填充元數據
在咱們所處的時代,MetaData是最重要的事情。MetaData能夠更輕鬆地找到您的包裹並最好地描述其做用。所以,請正確填寫您的元數據。在Visual Studio中建立類庫後,只需右鍵單擊並轉到屬性。您能夠在「打包」標籤下看到全部能夠填寫的字段。
若是您的環境不是Visual Studio,則能夠直接修改.csproj文件,以下所示。api

<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-d37400d9e1d3url

相關文章
相關標籤/搜索