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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

无法使用此安装程序来安装 .net framework_NuGet是什么?理解与使用(上)

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

如果你了解python,那么它類似pip。

如果你了解nodejs,那么它類似npm。

如果你了解ruby,那么它類似gem。

對(duì),它就是一個(gè)包(package)管理平臺(tái),確切的說(shuō)是 .net平臺(tái)的包管理工具,它提供了一系列客戶端用于生成,上傳和使用包(package),以及一個(gè)用于存儲(chǔ)所有包的中心庫(kù)即NuGet Gallery,如果有需要也可以搭建自己的私有NuGet庫(kù)。

NuGet 官方?www.nuget.org

對(duì)于一個(gè)現(xiàn)代化的開發(fā)平臺(tái),建立一種讓開發(fā)者創(chuàng)建,分享與使用可復(fù)用代碼的機(jī)制是十分必要的。這種“可復(fù)用代碼”被打包后的文件通常被稱作“包”(package),對(duì)于.NET(包括 .NET Core)平臺(tái)來(lái)說(shuō)這個(gè)機(jī)制的實(shí)現(xiàn)就是NuGet平臺(tái)。

NuGet的實(shí)現(xiàn)均為開源項(xiàng)目,包括了客戶端工具,服務(wù)器,官方網(wǎng)站以及各語(yǔ)言的文檔等。 這些項(xiàng)目可以在下面的鏈接中找到。

NuGet on GitHub?github.com

NuGet包的本質(zhì)是一個(gè)以nupkg為后綴的zip壓縮文件(你可以將后綴改為.zip后解壓查看里面的內(nèi)容),其中包含了編譯后的Dll文件以及其他相關(guān)文件。下圖顯示nuget包從創(chuàng)建,上傳到被使用的流程。

NuGet的客戶端融合在各類開發(fā)工具中,包括但不限于:

  • .net core SDK中的nuget命令行;
  • Visual Studio中的nuget工具;
  • nuget.exe 命令行客戶端;
  • Visual Studio Code中的nuget插件;
  • nuget客戶端工具

    在了解了nuget大致概念后我們可以通過(guò)發(fā)布一個(gè)nuget包來(lái)更仔細(xì)的了解如何使用nuget以及其中的重要概念。

    下文會(huì)以開發(fā)中最常接觸到的Visual Studio( 本文使用Visual Studio 2017 Community )做為演示工具來(lái)創(chuàng)建一個(gè)nuget包。要?jiǎng)?chuàng)建一個(gè)包首先需要一個(gè) .net項(xiàng)目,可以看到項(xiàng)目的創(chuàng)建頁(yè)面有很多選擇,類庫(kù)項(xiàng)目就可以選擇三種(.net core的類庫(kù)項(xiàng)目未顯示在截圖中) .Net Core;.Net Framework 還有 .Net Standard,到底應(yīng)該選擇哪一種呢?

    Visual Studio 2017 項(xiàng)目創(chuàng)建窗口

    為了做出選擇,我們首先要深入理解TFMs和 .net standard這兩個(gè)概念。首先創(chuàng)建一個(gè) .net core類庫(kù)項(xiàng)目。

    .net core類庫(kù)項(xiàng)目結(jié)構(gòu)

    在項(xiàng)目目錄中打開csproj文件可以看見下面的內(nèi)容。

    <Project

    可以看到該項(xiàng)目的TargetFramework為netcoreapp2.0,這里的netcoreapp2.0 就是TFMs,即Tagrget Framework Monikers 翻譯過(guò)來(lái)就是“目標(biāo)框架別名”,這個(gè)值指定了這個(gè)項(xiàng)目是跑在哪個(gè)Framework上的。

    如今 .net平臺(tái)有各種版本的Framework,在 .net core之前有 .Net Framework 1.0一直到現(xiàn)在的4.7等等各種版本, .net core現(xiàn)在有1.0/1.1/2.0/2.1。所有這些版本都有自己的代號(hào)/別名。全部的TFMs可以在下面的鏈接找到。

    Target frameworks?docs.microsoft.com

    這仍然沒有解決我們的問(wèn)題:如何決定使用哪個(gè)Framework?現(xiàn)在需要引入 .Net Standard,它是一個(gè)標(biāo)準(zhǔn), .net API的標(biāo)準(zhǔn),用來(lái)描述每個(gè)Framework的API實(shí)現(xiàn)情況。標(biāo)準(zhǔn)的版本越往后支持的API就越多,也就兼容了之前的版本。

    當(dāng)前各個(gè)Framework的 .Net Standard版本如下圖(如果你曾經(jīng)了解Portable Class Libraries(PCL),它已經(jīng)被 .net standard替代了,所以這里不多做說(shuō)明。):

    最新的內(nèi)容可以在下面的鏈接中找到。

    dotnet/standard?github.com

    所以要選擇哪個(gè)Framework,首先要確定的是:1)你的項(xiàng)目要使用哪些API?2)你項(xiàng)目要兼容哪些Framework? 總的來(lái)說(shuō):

  • 選擇更高的版本,你將有更多的API可以使用。(更豐富的API)
  • 選擇更低的版本,有更多的項(xiàng)目可以使用你的庫(kù)。(更好的兼容性)
  • 所以 .net standard的選擇原則就是:在API夠用的情況下選擇盡量低的 .net standard標(biāo)準(zhǔn)。這需要根據(jù)實(shí)際的項(xiàng)目需求來(lái)進(jìn)行判斷。

    了解了TFMs和 .net standard后我們繞回來(lái)說(shuō)NuGet,創(chuàng)建一個(gè) .net standard 2.0 類庫(kù)項(xiàng)目。

    打開csproj我們可以看到

    <Project

    可以看到TargetFramework是netstandard2.0。如果我們需要更改TargetFraamework,可以選擇項(xiàng)目【屬性】在【應(yīng)用程序】頁(yè)面可以進(jìn)行更改。

    目標(biāo)框架修改

    為了演示我們?yōu)轫?xiàng)目添加一個(gè)第三方包Newtonsoft.Json,右鍵點(diǎn)擊項(xiàng)目選擇管理NuGet程序包。

    打開后可以在Visual Studio左側(cè)看到下面的界面。

    這里顯示了項(xiàng)目已安裝的包,這個(gè)包由我們選擇的Target Framework隱式引用的。現(xiàn)在我們點(diǎn)擊瀏覽,搜索Newtonsoft.Json。

    120M的下載量,可見現(xiàn)在json的流行程度

    點(diǎn)擊安裝。

    安裝完成后可以看到程序包管理器輸出以下信息,并且引用中也添加了新的項(xiàng)目。

    但是我并沒有在項(xiàng)目文件夾下找到任何Newtonsoft.Json的程序集,包在哪?其實(shí)包被下載到了一個(gè)nuget公共目錄,在我的Windows10系統(tǒng)上是 C:Userswangl.nugetpackages,這樣nuget包就不會(huì)被重復(fù)下載。而在項(xiàng)目中nuget僅僅將依賴信息寫入了csproj項(xiàng)目文件與obj文件夾中的project.assets.json,其中csproj項(xiàng)目文件中的內(nèi)容如下。

    <Project

    包所依賴的內(nèi)容并不會(huì)被打包到最后的.nupkg文件中,NuGet只是將依賴信息寫入包,在最終使用這些包的應(yīng)用程序編譯時(shí)還原所有的依賴。

    至此我們簡(jiǎn)單了解了NuGet給項(xiàng)目添加引用的過(guò)程。對(duì)于更復(fù)雜情況的引用,如下圖

    項(xiàng)目引用示例

    這個(gè)項(xiàng)目的依賴樹中有三個(gè)對(duì)B包的引用,而三個(gè)包的版本要求可能是不相同的,但幸好我們只需要關(guān)心我們項(xiàng)目直接引用的包,因?yàn)镹uget會(huì)幫我們管理所有包的依賴并且對(duì)于被多次引用的包,Nuget會(huì)找出滿足該包所有使用者的版本(不過(guò)因?yàn)榘姹疽鬀_突而找不到適合包的情況是有可能的)。如果需要更詳細(xì)的了解nuget如何解析項(xiàng)目包的引用可以前往下面的鏈接。

    NuGet Package Dependency Resolution?docs.microsoft.com

    現(xiàn)在開始打包我們的類庫(kù)項(xiàng)目,首先要為包設(shè)置一些諸如版本,作者等相關(guān)信息。右鍵點(diǎn)擊項(xiàng)目選擇【屬性】,再選擇【打包】頁(yè),可以在這里輸入包的描述信息。

    打開csproj項(xiàng)目文件,可以看到這些信息也是保存在其中的。

    <Project

    填寫好信息后保存?;氐浇鉀Q方案,右鍵點(diǎn)擊項(xiàng)目選擇【打包】,可以看到以下輸出。

    1>------ 已啟動(dòng)生成: 項(xiàng)目: FishNo6.DemoPackage, 配置: Debug Any CPU ------ 1>FishNo6.DemoPackage -> E:labsFishNo6.DemoPackageFishNo6.DemoPackagebinDebugnetstandard2.0FishNo6.DemoPackage.dll 1>已成功創(chuàng)建包“E:labsFishNo6.DemoPackageFishNo6.DemoPackagebinDebugFishNo6.DemoPackage.1.0.1.nupkg”。 ========== 生成: 成功 1 個(gè),失敗 0 個(gè),最新 0 個(gè),跳過(guò) 0 個(gè) ==========

    在對(duì)應(yīng)目錄就可以找到nupkg包文件了。如果你的電腦安裝了NuGet Package Explorer可以直接雙擊打開包來(lái)查看信息,這個(gè)應(yīng)用可以在Window Store中安裝。

    到此我們成功創(chuàng)建了一個(gè)NuGet包。

    下篇內(nèi)容包括如何將包上傳到NuGet Gallary(NuGet官方庫(kù))以及更深入的了解NuGet平臺(tái)。

    最后附上NuGet官方文檔。

    NuGet Documentation?docs.microsoft.com

    本文的目的是記錄與分享自己的學(xué)習(xí)過(guò)程和個(gè)人你的看法。如果對(duì)你有任何幫助深感榮幸,若有任何紕漏煩請(qǐng)指正。如有任何問(wèn)題請(qǐng)?jiān)谠u(píng)論里留言,我會(huì)盡量解答。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的无法使用此安装程序来安装 .net framework_NuGet是什么?理解与使用(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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