如何從零開(kāi)發(fā)一個(gè)NuGet軟件包?

作者:依樂(lè)祝
首發(fā)地址:https://www.cnblogs.com/yilezhu/p/14175019.html
我想目前每個(gè).net開(kāi)發(fā)人員都應(yīng)該知道nuget.org和NuGet軟件包吧。但是,您是否曾經(jīng)嘗試并創(chuàng)建過(guò)一個(gè)nuget包呢?Nuget軟件包比較容易引入到類庫(kù)中。因此,可以使用NuGet軟件包管理器將nuget軟件包添加到任何項(xiàng)目中。
Nuget包的剖析
Nuget軟件包不僅是dll文件。NuGet包是可移植的,它包含您要放入.Net項(xiàng)目中的所有內(nèi)容。您可以在其中放置txt文件或png文件。這就是為什么我們稱它們?yōu)椤鞍薄D梢源虬恍╅_(kāi)發(fā)文件,并將它們以.nupkg格式在項(xiàng)目之間移動(dòng)。
我剛剛解壓縮了InputKit的nuget包,您可以在下圖中看到nupkg文件的樹(shù)狀視圖。

因此,只需查看其中的文件夾和文件。
icon.png:
這是您的NuGet包的圖標(biāo)文件。現(xiàn)在已將其嵌入.nupkg中,但在早期版本的NuGet中只能定義為url。
.nuspec
nuspec是關(guān)于nuget包的元數(shù)據(jù)文件。在早期版本中,它曾經(jīng)用于打包nuget包。但是在新的dotnet CLI中,此文件是由roslyn編譯器從您的.csproj文件生成的。它包括軟件包的目標(biāo)框架,名稱,許可證,圖標(biāo),標(biāo)簽,與其他包的依賴關(guān)系以及其中描述的要放置到添加的項(xiàng)目中的靜態(tài)文件。
[Content_Types] .xml:
這是一個(gè)元數(shù)據(jù)文件,提供了程序包中包含的每個(gè)文件擴(kuò)展名。
lib:
軟件包的主文件夾。此文件夾包括您的構(gòu)建輸出。換句話說(shuō),它在構(gòu)建之后包含了bin文件夾。所以您可以看到不同目標(biāo)框架的文件夾與項(xiàng)目輸出相同。例如,如果您的.csproj文件是多目標(biāo)的,您可以像我一樣看到每個(gè)目標(biāo)框架的文件夾。
package:
此文件夾包含有關(guān)您的包的更多元數(shù)據(jù)文件。此數(shù)據(jù)與您在nuget軟件包列表中看到的數(shù)據(jù)相同:“創(chuàng)建者”,“描述”,“標(biāo)識(shí)符”,“版本”和“關(guān)鍵字”。
_rels / .rels:
這是xml格式的文件擴(kuò)展名,由Microsoft創(chuàng)建和使用。您可以從此處查看有關(guān).rels格式的更多信息。它主要用于Microsoft Office。
創(chuàng)建你的第一個(gè)庫(kù)
每一個(gè)開(kāi)發(fā)者都應(yīng)該知道類庫(kù)。它們很難移動(dòng)或用于不同的項(xiàng)目。因?yàn)樗鼈兊妮敵鍪?strong>dll文件。在本文中,我不會(huì)談?wù)撊绾螛?gòu)建庫(kù)。我將展示如何將它們轉(zhuǎn)換為可移植的nuget包。因此,讓我們從第一步開(kāi)始。
1-選擇目標(biāo)框架
選擇目標(biāo)框架是非常重要!只需計(jì)劃你的項(xiàng)目并定義依賴項(xiàng)即可。如果您的依賴項(xiàng)需要.net core(如實(shí)體框架)或以.Net core為目標(biāo)的對(duì)象,只需將目標(biāo)框架選為“.Net core”。但如果不是,請(qǐng)始終嘗試在“.Net Standard”上構(gòu)建庫(kù)。順便說(shuō)一句,你可以建立一個(gè)多目標(biāo)項(xiàng)目。您可以從此處閱讀有關(guān)多目標(biāo)項(xiàng)目的更多信息。
2-填充元數(shù)據(jù)
在我們所處的時(shí)代,MetaData是最重要的事情。MetaData可以更輕松地找到您的包裹并最好地描述其作用。因此,請(qǐng)正確填寫(xiě)您的元數(shù)據(jù)。在Visual Studio中創(chuàng)建類庫(kù)后,只需右鍵單擊并轉(zhuǎn)到屬性。您可以在“打包”標(biāo)簽下看到所有可以填寫(xiě)的字段。
如果您的環(huán)境不是Visual Studio,則可以直接修改.csproj文件,如下所示。
"Microsoft.NET.Sdk">
netstandard2.0
My.Package
1.0.1
enisn
enisn
My Package
This is my packages description.
All rights reserved
MIT
https://github.com/enisn/MyPackage
https://github.com/enisn/MyPackage
my,awesome,package
Hot fixes
3-打包!
這就是奇跡發(fā)生的地方!準(zhǔn)備好你的代碼,右鍵單擊您的項(xiàng)目,然后單擊“打包”按鈕。您的nupkg文件將在您項(xiàng)目的bin文件夾中等待著您。
如果您的開(kāi)發(fā)環(huán)境不是Visual Studio,則可以使用命令提示符來(lái)執(zhí)行此操作,如下所示:
dotnet pack My.Package.csproj
4-與全世界分享!
轉(zhuǎn)到nuget.org并登錄到你的帳戶。然后導(dǎo)航到“發(fā)布”選項(xiàng)卡,并將您的.nupkg文件拖放到該頁(yè)面中。填寫(xiě)有關(guān)包裹的信息字段并提交。僅此而已!這是在nuget.org上發(fā)布軟件包的最簡(jiǎn)單方法。
使用命令行工具
但是您也可以在命令行下執(zhí)行此操作。讓我們來(lái)看看這種方式。
首先,您需要一個(gè)Api-Key與nuget API通信。轉(zhuǎn)到nuget.org上的個(gè)人資料,然后找到“?API密鑰”部分,如下所示。

創(chuàng)建一個(gè)API密鑰并保存它。您將無(wú)法再次看到它。因此,您需要保存它。
現(xiàn)在,從打包開(kāi)始,然后您可以通過(guò)CLI進(jìn)行推送。dotnet pack --configuration Release -o .packages/
這意味著在發(fā)布模式下構(gòu)建項(xiàng)目,并將輸出文件放置到“ .packages”文件夾中。因此,我們可以輕松地從.pacakges文件夾中找到輸出。因此,您的nupkg文件已準(zhǔn)備好推送。使用以下命令將軟件包推送到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?參數(shù),因?yàn)槿绻渲?CI?,則可以多次推送相同版本的軟件包,而如果要推送已經(jīng)存在的版本,則會(huì)出現(xiàn)錯(cuò)誤,并且?CI-CD?進(jìn)程將失敗。因此,使用?skip-duplicate?參數(shù)忽略已存在的版本推送,并成功完成操作。
感謝您的閱讀,我們下篇文章見(jiàn)!
翻譯自:https://enisn.medium.com/how-to-develop-a-nuget-package-d37400d9e1d3
【推薦】.NET Core開(kāi)發(fā)實(shí)戰(zhàn)視頻課程?★★★
.NET Core實(shí)戰(zhàn)項(xiàng)目之CMS 第一章 入門(mén)篇-開(kāi)篇及總體規(guī)劃
【.NET Core微服務(wù)實(shí)戰(zhàn)-統(tǒng)一身份認(rèn)證】開(kāi)篇及目錄索引
Redis基本使用及百億數(shù)據(jù)量中的使用技巧分享(附視頻地址及觀看指南)
.NET Core中的一個(gè)接口多種實(shí)現(xiàn)的依賴注入與動(dòng)態(tài)選擇看這篇就夠了
10個(gè)小技巧助您寫(xiě)出高性能的ASP.NET Core代碼
用abp vNext快速開(kāi)發(fā)Quartz.NET定時(shí)任務(wù)管理界面
在ASP.NET Core中創(chuàng)建基于Quartz.NET托管服務(wù)輕松實(shí)現(xiàn)作業(yè)調(diào)度
現(xiàn)身說(shuō)法:實(shí)際業(yè)務(wù)出發(fā)分析百億數(shù)據(jù)量下的多表查詢優(yōu)化
