ASP.NET MVC學(xué)習(xí)之NuGet在VS中的運(yùn)用淺談
為什么要使用NuGet
簡(jiǎn)單的說(shuō)NuGet可以是我們的工作更方便,當(dāng)我們的項(xiàng)目里要引用到的一些庫(kù)時(shí)候,比如JQuery、Newtonsoft.Json、log4net等,我們需要從網(wǎng)上下載這些庫(kù),然后依次拷貝到各個(gè)項(xiàng)目中,當(dāng)有的類(lèi)庫(kù)有更新時(shí)又不得不再重復(fù)一遍很是繁瑣 ,這時(shí)就可以考慮使用NuGet來(lái)幫我們管理和更新這些類(lèi)庫(kù),而且更新類(lèi)庫(kù)時(shí)會(huì)自動(dòng)添加類(lèi)庫(kù)的相關(guān)引用,方便至極。當(dāng)然網(wǎng)上一些我們常用的類(lèi)庫(kù)更新頻率不是很高而且即便出了新版本我們也沒(méi)必要總是保持最新,故這點(diǎn)對(duì)我們的幫助比較有限,個(gè)人認(rèn)為NuGet最大的好處在于可以搭建自己的類(lèi)庫(kù)服務(wù)器,想想一下吧,在一些較大些的公司里面有很多的項(xiàng)目,然后其中有一些是整個(gè)組,甚至整個(gè)公司通用的類(lèi)庫(kù),當(dāng)這些類(lèi)庫(kù)有更新后我們需要依次拷貝到我們的項(xiàng)目,甚至于有時(shí)候我們自己都搞不清楚各個(gè)項(xiàng)目里的版本是否一致,有時(shí)偶爾一兩個(gè)項(xiàng)目忘了復(fù)制更新出現(xiàn)莫名其妙的錯(cuò)誤,為此頭疼不已,現(xiàn)在有了NuGet,世界從此而不同。
一 概述
在我們講解NuGet前,我們先來(lái)看看一個(gè)例子。
1.例子:
假設(shè)現(xiàn)在開(kāi)發(fā)一套系統(tǒng),其中前端框架我們選擇Bootstrap,由于選擇Bootstrap作為前端框架,因此,在項(xiàng)目中,我們需要引入Bootstrap相關(guān)文件,大致會(huì)執(zhí)行如下操作。
步驟一:下載Bootstrap文件
輸入Bootstrap官網(wǎng)域名 http://v3.bootcss.com/
輸入域名,進(jìn)入官網(wǎng)

步驟二:選擇合適的版本,下載Bootstrap包

步驟三:將包引入到項(xiàng)目中

關(guān)于將Bootstrap包引入到Project中,過(guò)程似乎比較麻煩,更可怕的的是,當(dāng)在項(xiàng)目中的Bootstrap包需要更新時(shí),需要做重復(fù)的工作,這是非常繁瑣的,很好的是,VS自帶的NuGet包管理器很好地
幫助我們解決了此類(lèi)問(wèn)題。
2.何為Nuget包管理器?
對(duì)于.NET和VS而言,NuGet是一個(gè).NET包管理系統(tǒng),它可以很容易地響應(yīng)運(yùn)用程序中添加、更新和刪除外部庫(kù)文件及其依賴(lài)。
除此之外,我們可以通過(guò)創(chuàng)建包,發(fā)布包實(shí)現(xiàn)包之間的共享,使共享得以實(shí)現(xiàn)。
站在微軟的角度:要盡可能地嘗試,不要指望Microsoft為我們提供所需要的每一段代碼,在.NET平臺(tái)上進(jìn)行開(kāi)發(fā)的開(kāi)發(fā)人員多大數(shù)百萬(wàn)甚至上千萬(wàn),而每一個(gè)開(kāi)發(fā)人員都有其獨(dú)特的技術(shù)和有待解決
的問(wèn)題,等待Microsoft去解決每個(gè)開(kāi)發(fā)人員的每個(gè)問(wèn)題,既形不成規(guī)模,也沒(méi)有意義。值得慶幸的是,他們可以通過(guò)網(wǎng)上發(fā)布的一些庫(kù)萊解決他們或他們客戶遇到的問(wèn)題。然而,面對(duì)網(wǎng)上的這些有
用的庫(kù)我們面臨三大挑戰(zhàn):發(fā)現(xiàn),安裝和維護(hù)。但慶幸的是,NuGet卻很好地解決了此類(lèi)問(wèn)題。
二 將包添加到庫(kù)
將包添加到庫(kù),有許多方式,常用方式為Manage NuGet Package 和 Package Manager Console,下面將結(jié)合VS2017和基于ASP.NET MVC模板講解該兩種方式。
(一)Manage NuGet Packages
1.準(zhǔn)備好VS2017開(kāi)發(fā)環(huán)境,并用VS的MVC模板創(chuàng)建一個(gè)默認(rèn)項(xiàng)目:NuGetDemo

分析:
細(xì)心的你會(huì)發(fā)現(xiàn),在上圖中出項(xiàng)了packages.config文件,其實(shí),它就是NuGet包的配置文件,因?yàn)槲覀冊(cè)谶x擇基于MVC模板創(chuàng)建項(xiàng)目時(shí),默認(rèn)的引入了第三方庫(kù)文件,如Bootstrap,Jquery等;

2.打開(kāi)NuGet包管理器
引用=>管理Nuget程序包

3.打開(kāi)NuGet包管理器后,我們可執(zhí)行如下操作
(1)瀏覽包 (2)查看當(dāng)前系統(tǒng)已安裝包 (3)更新包 (4)在搜索框中搜索包

4.查看包的詳細(xì)信息
我們以log4net為例

分析:
包的基本信息

5.安裝
在安裝AnyLog.Log4Net之前,先選擇好安裝版本,然后再安裝。

6.查看安裝情況
(1)查看控制臺(tái)輸出安裝信息情況

(2)查看NuGet包已安裝情況

(3)查看項(xiàng)目引用情況

(4)查看packages.config文件

7.更新包
NuGet包管理器不僅能幫助我們安裝包,而且還能幫助我們維護(hù)包,我們可以借助NuGet包管理器來(lái)更新包。
注意:當(dāng)我們更新包時(shí),這個(gè)操作也會(huì)更新該包的所以依賴(lài),以確保只安裝依賴(lài)的兼容保本。
在以下例子中,我們?cè)陧?xiàng)目NuGet中安裝了Log4net 2.0.3版本,現(xiàn)在,我們將其更新都最新版本2.0.8,選擇“更新”。

點(diǎn)擊確認(rèn)。
注意,此步會(huì)更新運(yùn)用程序中與Log4net相關(guān)所有內(nèi)容。

查看更新結(jié)果

8.包恢復(fù)
NuGet默認(rèn)的工作流程是把包文件夾提交到版本控制,這樣做的一個(gè)好處是可從版本控制檢索解決方案,以確保構(gòu)建解決方案的每個(gè)包都能夠安裝,而且這些包還不需要從其他位置檢索。
但是,這樣做也是有弊端的,Packages文件夾不是VS解決方案的一部分,因此,通過(guò)VS集成管理版本控制的開(kāi)發(fā)人員需要進(jìn)行一個(gè)額外的步驟以確保Packages文件夾能夠提交。
(1)TFS可以自動(dòng)提交Packages文件夾
(2)分布式版本控制系統(tǒng)(如Git),不建議把Packages文件夾提交到版本控制,因?yàn)榉植际桨姹究刂葡到y(tǒng)不擅長(zhǎng)處理二進(jìn)制文件,如果項(xiàng)目中大量的包都有變化,分布式版本控制系統(tǒng)庫(kù)就會(huì)
變得很龐大。
可喜的是,NuGet 1.6引入的包修復(fù)功能來(lái)處理這些問(wèn)題,這樣就支持一個(gè)新的個(gè)工作流程,我們就不需要把Packages文件夾提交到源代碼控制了。
這個(gè)過(guò)程需要手動(dòng)執(zhí)行幾個(gè)步驟:對(duì)每個(gè)項(xiàng)目都需要執(zhí)行單獨(dú)的一步操作,以啟用包恢復(fù)(在NuGet2.0~2.6中,每個(gè)開(kāi)發(fā)人員還需要配置VS來(lái)允許包恢復(fù))
注意:
現(xiàn)在NuGet包恢復(fù)時(shí)自動(dòng)啟用的,但是在VS的Package Manager設(shè)置中使用下面兩個(gè)選項(xiàng),可以禁用包恢復(fù)功能:
a.允許NuGet下載缺少包;
b.在VS中構(gòu)建運(yùn)用程序時(shí),自動(dòng)檢查缺少的包;
通過(guò)NuGet 2.7 自動(dòng)包恢復(fù)功能。
(二)Package Manager Console
Package Manager Console是Visual Studio 中基于PowerShell的控制臺(tái),不僅提供了強(qiáng)大的功能來(lái)查找和安裝包,而且還支持Manager NuGet Packages對(duì)話框不支持的一些功能。
1.啟動(dòng)控制臺(tái)
工具=>NuGet包管理器=>程序包管理器控制臺(tái)

2.查看當(dāng)前項(xiàng)目已安裝的包
在控制臺(tái)中輸入Get--Package,可以查看當(dāng)前項(xiàng)目已安裝的包

拓展:
(1)以前版本,可以通過(guò)以下命令來(lái)過(guò)濾包
Get-Package -ListAvailable -Filter Route

(2)可以采用如下命令代替Get-Package -ListAvailable -Filter 命令
Find-Package [-Id]

3.安裝包
在控制臺(tái)中通過(guò):Install-Package 包名
下圖中,我們?cè)陧?xiàng)目中安裝Log4net,因此輸入Install-Package Log4net,由于我已在項(xiàng)目中安裝了Log4net,因此提示已經(jīng)安裝。

拓展:
(1)PowerShell命令的支持?jǐn)U展功能,相當(dāng)于智能感應(yīng)。輸入命令部分字符,按Tab鍵就可以查看輸入的內(nèi)容,從而實(shí)現(xiàn)智能感應(yīng)。

(2)PowerShell支持復(fù)合命令,比如通過(guò)將一個(gè)命令管道傳輸?shù)搅硪粋€(gè)命令。
如下命令向解決方案中每一個(gè)項(xiàng)目安裝一個(gè)包。
Get-Project -ALL | Install-Package log4net

(3)PowerShell也支持動(dòng)態(tài)添加新命令
PowerShell強(qiáng)大之處在于,安裝的一些包可以為shell添加新命令。

(三)其他方式啟動(dòng)NuGet
如在項(xiàng)目名稱(chēng)中添加,這里不論述,核心內(nèi)容還是在如上的(一)和(二)部分。

4.關(guān)于包源和項(xiàng)目的選擇
通過(guò)選擇程序包源右邊的齒輪,即可查看該包及對(duì)包的基本操作

5.NuGet包管理器概述
(1)NuGe包管理器基本界面
在控制臺(tái)操作中,由兩大部分組成:常規(guī)和程序包源

(2)程序包源概述

拓展:
在Manage NuGet Packages 操作包方式中,與如上對(duì)應(yīng)的操作

例子講解:
下面我們講解基于如上兩種模式添加autofac包的操作過(guò)程
Manage NuGet Packages 方式

控制臺(tái)操作方式
(1)找到autofac包的NuGet地址

(2)添加autofac包

三 創(chuàng)建包
篇幅有限,以后專(zhuān)門(mén)寫(xiě)一篇文章概述......
四 發(fā)布包
篇幅有限,以后專(zhuān)門(mén)寫(xiě)一篇文章概述......
五 參考文獻(xiàn)
【01】ASP.NET MVC5 高級(jí)編程(Jon Galloway,Brad Wilson,K.Scott Allen,David Matson ,孫遠(yuǎn)帥 譯)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
asp.net發(fā)送郵件實(shí)現(xiàn)方法
這篇文章主要介紹了asp.net發(fā)送郵件實(shí)現(xiàn)方法,以一個(gè)具體實(shí)例的形式詳細(xì)講述了asp.net發(fā)送郵件的技巧,需要的朋友可以參考下2014-10-10
asp.net連接數(shù)據(jù)庫(kù)讀取數(shù)據(jù)示例分享
這篇文章主要介紹了asp.net連接數(shù)據(jù)庫(kù)讀取數(shù)據(jù)示例,大家參考使用吧2014-01-01
.net泛型通用函數(shù)的特殊問(wèn)題的解決方法
本文介紹了.net泛型通用函數(shù)的特殊問(wèn)題的解決方法,需要的朋友可以參考一下2013-02-02
log4net創(chuàng)建系統(tǒng)日志的詳細(xì)步驟
log4net是.Net下一個(gè)非常優(yōu)秀的開(kāi)源日志記錄組件。log4net記錄日志的功能非常強(qiáng)大。它可以將日志分不同的等級(jí),以不同的格式,輸出到不同的媒介。本文主要是簡(jiǎn)單的介紹如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速創(chuàng)建系統(tǒng)日志,如何擴(kuò)展以輸出自定義字段2013-11-11
一個(gè)支持普通分頁(yè)和綜合分頁(yè)的MVC分頁(yè)Helper
這篇文章主要為大家詳細(xì)介紹了一個(gè)支持普通分頁(yè)和綜合分頁(yè)的MVC分頁(yè)Helper,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
ASP.NET數(shù)據(jù)庫(kù)編程之Access連接失敗
ASP.NET數(shù)據(jù)庫(kù)編程之Access連接失敗...2006-09-09
ASP.NET Core 2.2中的Endpoint路由詳解
這篇文章主要介紹了ASP.NET Core 2.2中的Endpoint路由詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
asp.net textbox javascript實(shí)現(xiàn)enter與ctrl+enter互換 文本框發(fā)送消息與換行(類(lèi)似
今天與大家分享一下 asp.net textbox javascript實(shí)現(xiàn)enter與ctrl+enter互換 文本框發(fā)送消息與換行(類(lèi)似于QQ),這個(gè)功能到底怎么實(shí)現(xiàn)?首先聲明以下幾點(diǎn)2012-01-01

