日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

NuGet是什么?理解与使用(下)

發(fā)布時(shí)間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NuGet是什么?理解与使用(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇將回答下面幾個(gè)問題:

  • 如何解讀NuGet Gallery上的包信息?
  • 如何上傳NuGet包到NuGet Gallery?
  • 如何安裝本地NuGet包?
  • NuGet包的內(nèi)容文件與目錄結(jié)構(gòu)?

如果你沒看過上篇那么它在這里:

6號(hào)咸魚:NuGet是什么?理解與使用(上)?


那么開始,

一,如何解讀NuGet Gallery上的包信息?

我們先以Newtonsoft.Json為例,在其NuGet頁(yè)面上可以看到如下頁(yè)面,其中包含了作者,描述,依賴等等信息。

其中重要的依賴關(guān)系(部分)如下,

較大字體顯示內(nèi)容如.NETFramework 2.0表示Target Framework(目標(biāo)框架),在Target Framework下面的為此Target Framework對(duì)應(yīng)的依賴,所以用一句話可以解讀為:“如果你項(xiàng)目的目標(biāo)框架也是.NETFramework 2.0,那么你就不需要依賴任何其它包就可以使用這個(gè)包”。同樣的下面.NETFramework 1.0的含義就是:“如果你的項(xiàng)目的目標(biāo)框架為.NETFramework 1.0那么需要引用下面的包后才能使用該包。”不過這些都不需要你手動(dòng)去引用,NuGet會(huì)在你安裝該包時(shí)自動(dòng)安裝其依賴的包。

Newtonsoft.Json這樣的包是NuGet平臺(tái)上的典型,除此之外還有一些比較特殊但也非常重要的包。我們來看一下Microsoft.NETCore.Platforms,下面是這個(gè)包的頁(yè)面。

可以看到這個(gè)包竟然沒有任何依賴,這是因?yàn)檫@個(gè)包并不包含任何DLL,所以也不需要依賴任何目標(biāo)框架,NuGet的包可以包含任何你想發(fā)布的文件而不僅僅是DLL程序集。

下面在介紹另一種比較特殊的包,元包(Meta Package), Microsoft.AspNetCore.All就是一個(gè)元包 ,下面是它的頁(yè)面。

頁(yè)面上顯示和普通的包并沒有區(qū)別,為了更直觀的演示我們把這個(gè)包的nupkg文件下載到本地,解壓后可以看到在其lib目錄下面只包含了一個(gè)空文件。

其實(shí)這個(gè)包本身并不包含內(nèi)容,它通過對(duì)其他包的依賴定義自己。元包是一個(gè)NuGet包的約定,描述了一組放在一起有意義的包(Metapackages are a NuGet package convention for describing a set of packages that are meaningful together.)

這樣做的原因首先是因?yàn)镹uGet的包管理是“細(xì)粒度”的,原則上每個(gè)程序集(DLL)都應(yīng)該是一個(gè)包,這樣可以帶來以下幾個(gè)好處:

  • 細(xì)粒度的包在開發(fā)、測(cè)試的過程中與其它包的關(guān)聯(lián)有限。
  • 細(xì)粒度的包可以提供對(duì)不同操作系統(tǒng)和CPU的支持。
  • 細(xì)粒度的包可以只依賴某個(gè)特定的庫(kù)。
  • 在發(fā)布應(yīng)用時(shí),未被引用的包不會(huì)成為應(yīng)用的一部分,因此應(yīng)用程序的體積會(huì)有更小。

但是對(duì)于某些情況,元包則有更多好處:

  • 在引用大量細(xì)粒度包時(shí)有更好的用戶體驗(yàn)
  • 定義了一組經(jīng)過測(cè)試且運(yùn)行良好的包(包括指定的各種版本)

而下面這個(gè)元包比較特殊:Microsoft.NETCore.App,因?yàn)樗粌H是元包也定義了框架,也就是我們項(xiàng)目里的目標(biāo)框架(Tagrget Framework)。這會(huì)在解讀這類目標(biāo)框架的元包時(shí)造成一定的困惑,以 Microsoft.NETCore.App上的頁(yè)面為例,因?yàn)樗旧矶x了目標(biāo)框架。不過我們應(yīng)該不會(huì)手動(dòng)去引用這些包,這些包通常是在是設(shè)置目標(biāo)框架是被項(xiàng)目隱式應(yīng)用的。

下面這張圖描述了這種關(guān)系:API定義了框架,框架用于元包中包的選擇,而這些包給你提供了API的實(shí)現(xiàn)。

?

更多資料可以查看下面這篇文章和其中文譯文,對(duì)你理解NuGet平臺(tái)和包,元包,框架的設(shè)計(jì)很有幫助。

Packages, metapackages and frameworks?docs.microsoft.com.NET Core中的包、元包與框架?www.cnblogs.com

二,如何上傳NuGet包?

要上傳NuGet包到NuGet Gallery,首先你需要一個(gè)NuGet賬號(hào)或者微軟賬號(hào),然后準(zhǔn)備好你的nupkg文件就可以開始上傳了。

下面簡(jiǎn)單介紹三種方式:

1,在NuGet Gallery網(wǎng)頁(yè)上傳包,這是最方便快捷的方式。登錄NuGet Gallery 點(diǎn)擊Upload菜單進(jìn)入上傳頁(yè)面。

nuget gallery包上傳頁(yè)面

點(diǎn)擊Browse選擇你的包文件,頁(yè)面將讀取你的包信息并顯示在頁(yè)面上。

填寫包的文檔相關(guān)信息。

填寫包的文檔相關(guān)信息

確保所有信息正確后就可以點(diǎn)擊Submit發(fā)布你的包了!

2,在NuGet Package Expolrer中上傳包,這個(gè)應(yīng)用可以在Windows Store中免費(fèi)安裝。在使用該工具上傳包之前你需要一個(gè)API Key,因?yàn)槌褂霉俜缴蟼黜?yè)面的方式外所有其他方式上傳包都需要使用一個(gè)API Key,這個(gè)Key可以在官方網(wǎng)站獲取。在個(gè)人帳號(hào)的下拉菜單中選擇API Keys。

進(jìn)入API Key管理頁(yè)面,點(diǎn)擊如下圖的Create,開始創(chuàng)建一個(gè)API Key。

填寫好Key的名稱,過期時(shí)間,再選擇該Key可以使用的功能和對(duì)應(yīng)的包,點(diǎn)擊確認(rèn)成功創(chuàng)建后可以看到如下圖的頁(yè)面。

點(diǎn)擊Copy就可以拷貝你的Key到剪貼板。有了API Key之后我們使用NuGet Explorer打開我們的包,在File菜單中選擇Publish.

點(diǎn)擊Publish后出現(xiàn)如下界面。

輸入所需的API Key點(diǎn)擊Publish。

3,使用 .net core SDK命令行上傳包,可以執(zhí)行dotnet nuget push的命令,其中第一個(gè)參數(shù)為包所在目錄,若再當(dāng)前目錄可直接填入文件名, -k參數(shù)就是我們?cè)谏厦嫠@取到的API Key,如下面的命令行示例。

dotnet nuget push foo.nupkg -k 4003d786-cc37-4004-bfdf-c4f3e8ef9b3a

該命令還有許多其他參數(shù),更多信息可前往下面的鏈接:

dotnet nuget push command - .NET Core CLI?docs.microsoft.com

需要注意的是包上傳后是不能被刪除的,只能被unlist。鑒于此我沒有真的上傳我的包,因?yàn)橹酪粋€(gè)完全沒有意義的包在我的賬號(hào)里還無法刪除會(huì)讓我寢食難安的。大家可以自己動(dòng)手嘗試。

?

三,如何安裝本地NuGet包?

以Visual Studio 2017 Community為例,打開你的項(xiàng)目,右鍵點(diǎn)擊項(xiàng)目選擇【管理NuGet程序包】。

然后點(diǎn)擊NuGet程序包管理界面右上角的齒輪,出現(xiàn)下面的設(shè)置窗口。

點(diǎn)擊+號(hào)新建一個(gè)可用程序包源,設(shè)置你想要的名稱并選擇源的所在目錄,點(diǎn)擊確定。

再次打開NuGet程序包器,你可以在程序包源選項(xiàng)中看到看添加的源,選中后就可以看到你在該本地路徑中放置的包了!

四,NuGet包的內(nèi)容與目錄結(jié)構(gòu)?

我們?nèi)砸訬ewtonsoft.Json包為例,將后綴改為.zip并解壓后可以看到以下目錄結(jié)構(gòu)。

其中l(wèi)ib目錄如下圖,它保存了各個(gè)目標(biāo)框架下對(duì)應(yīng)的程序集。

Newtonsoft.Json.nuspec為xml格式的manifest文件保存了包的元數(shù)據(jù),如作者,版本,包含內(nèi)容等等信息。rels,[Content_Types].xml,package為打包時(shí)生成的文件。

除了這些目錄外,包內(nèi)還可以包含runtimes,content,build,tools等文件夾,下面介紹runtimes和content文件夾。

如果你的程序集對(duì)不同的操作系統(tǒng)有不同的實(shí)現(xiàn),你需要將這些程序集按照下面的目錄結(jié)構(gòu)放入runtimes文件夾中。

\runtimes\win10-arm\native\lib\uap10.0\win10-x86\native\lib\uap10.0\win10-x64\native\lib\uap10.0

而對(duì)于content文件夾,你可以把它看做是目標(biāo)項(xiàng)目的根目錄,也就是該文件夾下的內(nèi)容會(huì)在包被安裝時(shí)拷貝到項(xiàng)目的目錄下。比如包里的content/images目錄在包被安裝之后就會(huì)在你的項(xiàng)目目錄下放置一個(gè)images目錄。

除了這些主要的文件夾,NuGet包里還可以包含build,tools等文件夾和文件,更多詳細(xì)內(nèi)容可查看下面的文檔。

How to create a NuGet package?docs.microsoft.com

希望本篇能讓你對(duì).net的包管理平臺(tái)有基本的了解,利用好NuGet平臺(tái)會(huì)給你以后的項(xiàng)目開發(fā)提供很大的幫助。

最后,如果你有任何問題歡迎在評(píng)論,我會(huì)盡量解答。

如果喜歡類似的文章,請(qǐng)關(guān)注,非常感謝,.net社區(qū)的壯大需要大家的努力。

總結(jié)

以上是生活随笔為你收集整理的NuGet是什么?理解与使用(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。