NuGet學習筆記(1)——初識NuGet及快速安裝使用
http://kb.cnblogs.com/page/143190/
1. NuGet是什么?
NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework. This topic lists documentation that will help you use NuGet packages and create your own. NuGet 是一個Visual Studio的擴展。在使用Visual Studio開發基於.NET Framework的應用時,NuGet能夠令你在項目中添加、移除和更新引用的工作變得更加快捷方便。
這就是說: 我們往往在開發項目里,會使用一些第三方的dll, 如:Newtonsoft.Json.dll (它為我們提供了進行序列化和反序列化解決方案, 很有用,也很穩定,還很有名氣)。 但是,我們往往也面臨隨着項目升級,對這些引入的第三方插件進行升級的可能和必要。 比方說,原本的項目是vs2008 + C# 3.5 實現的,並引入了Newtonsoft.Json.dll 2.0版本, 現在對項目升級成了Vs 2010 + C# 4.0。 如果 你想或者必須將舊版本升級到最新版本才能工作或者僅是保持版本上的一致; 同時,Newtonsoft 提供Json.Net對C# 4.0 支持版本,即:Newtonsoft.Json.dll 4.0。 你就需要到官網或者通過Google 去尋找它的最新版本,下載,解壓,然后替代等操作。 似乎看上去,也沒多少復雜的事情, 也習以為常了。誰叫咱引用別人的東西,只能跟着走了,習慣了這樣的更新,總比自己寫更快吧。
現在,NuGet 將這個過程系統化,令你可以更加方便的查找你要的第三方的dll, 同時,還可以為你提供自動或者手動更新,而無需你在人肉搜索與更新了。 |
初次認識NuGet是在去年把項目升級為MVC3的時候,當時看到工具菜單多一項Library Package Manager,右鍵項目文件多了一項Manage Nuget Packages...,這是個神馬玩意兒,當時是一頭霧水,后台查了些資料才知到NuGet是 Visual Studio的一個擴展,引用dudu的話來說就是管理程序的包包,可以參考msdn上這篇文章使用 NuGet 管理項目庫以及咱們博客園站長dudu寫的程序員,用NuGet管理好你的類庫,有些類似java中常用的maven
為什么要使用NuGet
簡單的說NuGet可以是我們的工作更方便,當我們的項目里要引用到的一些庫時候,比如JQuery、Newtonsoft.Json、log4net等,我們需要從網上下載這些庫,然后依次拷貝到各個項目中,當有的類庫有更新時又不得不再重復一遍很是繁瑣 ,這時就可以考慮使用NuGet來幫我們管理和更新這些類庫,而且更新類庫時會自動添加類庫的相關引用,方便至極。當然網上一些我們常用的類庫更新頻率不是很高而且即便出了新版本我們也沒必要總是保持最新,故這點對我們的幫助比較有限,個人認為NuGet最大的好處在於可以搭建自己的類庫服務器,想想一下吧,在一些較大些的公司里面有很多的項目,然后其中有一些是整個組,甚至整個公司通用的類庫,當這些類庫有更新后我們需要依次拷貝到我們的項目,甚至於有時候我們自己都搞不清楚各個項目里的版本是否一致,有時偶爾一兩個項目忘了復制更新出現莫名其妙的錯誤,為此頭疼不已,現在有了NuGet,世界從此而不同。
安裝NuGet擴展
要使用NuGet首先需要安裝它(在安裝了MVC3的系統上已自動安裝了NuGet)
1. 點擊 工具-->擴展管理器(R)...-->右上角搜索框輸入NuGet
2. 點擊 NuGetPackage Manager 項上面的下載按鈕開始下載NuGet
3. 下載完成后出現安裝頁面,點安裝開始安裝
4. 很快安裝完成,然后點擊關閉完成整個安裝
5. 安裝完后NuGet暫時不能用,需要重新啟動下VS才行,重啟后完畢后打開 擴展管理器(R)... 在已安裝的擴展里可以看到NuGet Package Manager已經安裝好了
使用NuGet下載需要的類庫
1. 打開NuGet管理界面
2. 出現如下界面,可以在里面找自己想要的類庫也可以在右上角搜索里面輸入關鍵字查找自己想要的類庫,找到合適自己的類庫后點install進行安裝
3. 這里我們選擇安裝Json.Net,點擊安裝好出現組件下載界面
4. 下載完成后會出現提示將類庫安裝到什么項目,這里我們選擇安裝到TestConsole項目
5. 安裝完成后可以看到已經安裝的Josn.Net顯示一個已安裝的小對勾
6. 打開項目引用可以看到我們剛選擇的類庫Newtonsoft.Json已經自動添加到項目引用中
使用命令行管理你的類庫
1. NuGet提供了命令行安裝方法,在菜單中選擇Package Manager Console,打開命令行控制台
2. 出現NuGet控制台界面,默認類庫源(Package source)為官方站點,也可以指向自己搭建的本地或內網站點,Default project表示默認將下載的類庫添加到那個項目的引用中
3. NuGet控制台有幾個常用命令
Get-Package 獲取當前項目已經安裝的類庫
Install-Package 安裝指定類庫,命令格式如下:Install-Package 類庫ID,如Install-Package Newtonsoft.Json 這里需要注意的是類庫的ID是唯一的,指向命令后會自動搜索指定類庫源里指定ID類庫,若找到則自動下載並添加引用,找不到則會出現找不到類庫的提示
Uninstall-Package 卸載指定類庫,命令格式如下:Uninstall-Package 類庫ID,如Uninstall-Package Newtonsoft.Json
Update-Package 更新指定類庫,命令格式如下:Update-Package 類庫ID,如Update-Package Newtonsoft.Json
ps:剛開始不熟悉時可以使用界面方式下載和更新類庫,有一定經驗后還是建議使用控制台添加、更新類庫這樣很方便,由於使用控制台需要知道類庫的准確ID,可以到http://www.nuget.org/packages這里去查找,把自己常用的ID記錄下方便以后使用
NuGet相對於我們最重要的功能是能夠搭建自己的NuGet服務器,實現公司內部類庫的輕松共享更新。在安裝好NuGet擴展后,我們已經能夠通過NuGet輕松下載自己需要的類庫,下面來說一說如何將自己的項目類庫進行打包發布
使用圖形界面打包自己的類庫
NuGet可以使用NuGet.exe在命令行下進行類庫打包,也可以使用圖形化界面進行打包,估計很多朋友都和我一樣對不熟悉的命令行有些感冒,所以在此僅講述下使用圖形化界面進行類庫打包
1. 首先下載 包包管理器 NuGetPackageExplorer,顧名思義,包包管理器可以用來創建新的類庫包,也可以瀏覽已經創建好的類庫包
2. 下載完成后,雙擊 NuGetPackageExplorer.application 進行安裝,安裝完成后會在桌面上生成一個NuGet Package Explorer 的快捷方式
3. 雙擊NuGet Package Explorer出現啟動界面,選擇Create a new package(Ctrl+N)創建一個新包
4. 選擇菜單 Edit > Edit Package Metadata (或者 CTRL + K) 編輯包包信息
這里可以編輯類庫包的信息和添加類庫、程序集的引用解釋下幾個比較重要的字段
Id:用於定位類庫包的唯一標示,如在命令行下執行 Install-Package MyPackage 這里的MyPackage就是包包的Id值
Version:類庫的版本號,這里建議和程序集的真實版本號保持一致,以免發生混淆
Dependencies:此類庫依賴的程序集,根據實際情況添加依賴類庫的Id和版本號,若無留空即可,這里需要注意下填寫的依賴類庫需要在NuGet服務器上能找到,否則無法完成自動引用添加
Framework assemblies:依賴的Framework 程序集,根據實際需要選擇即可,一般無需設置
除以上四項以外其他屬性根據實際情況修改即可,若自己用不修改也中,不過為了使用方便還是建議把類庫描述(Description)填寫下
5. 編輯好包包信息后接下來添加DLL到包包中
可以選擇 右鍵-->Add Existinng File... 選擇dll添加,也可以直接拖拽DLL到 Package contents 窗口,此例選擇拖拽方式
直接拖拽dll到窗口后,會出現提示:是否將 Winista.HtmlParser.dll放到lib 文件夾下,一般我們選擇是
6. DLL添加完成后,快捷鍵Ctrl + K 修改包包信息Id為Winista.HtmlParser,版本號為1.8.0
7. 信息修改和dll都添加完畢后,選擇File --> Save(或Ctrl + S)將文件進行保存,默認文件名為Id + 版本號.nupkg
8. 完成保存后如需要發布到網上,選擇File--> Publish...(或Ctrl + P)
默認的發布地址是官網,發布 Key需要到官網去注冊一個賬號,然后就可以得到,這里不在復述,若無需發布直接關閉即可
ps:這里沒有講述如何打包項目文件,一般情況下我們自己將項目文件編譯成DLL然后使用圖形化界面打包即可滿足需求,若實際工作需要高度集成完全自動化操作可自行去研究下官方文檔http://docs.nuget.org/
添加DLL默認會添加Lib文件夾,額外的菜單上還有很多.net文件夾,src等文件夾,這些文件夾只是對文件上的一個物理上的划分而已,只是為了幫助我們做好文件分類,沒有其他的用途,dll文件可以隨便放置,不過為了規范還是建議按照通常習慣來放置。
創建NuGetServer Web站點
1. 新建Web站點,選擇 文件-->新建項目-->Asp.Net 空 Web應用程序
2. 選擇 工具-->Library Package Manager-->Package Manager Console 打開NuGet命令行控制台
3. 在控制台輸入Install-Package NuGet.Server (請保持Package source:官方源,即 Nuget offical package source,一般默認即為官方Package源)
4. 回車確認后開始下載並安裝NuGet.Server類庫及相關引用,並自動添加引用到項目
注:具體輸出根據版本不同會略有不同
自動添加的引用
5. 在控制台輸入 Get-Package 可以看到剛剛安裝的類庫
6. 除添加類庫引用外,還自動添加了一些文件(關於這些文件及其作用本文不做探討,有興趣的可以自行研究下,都很簡單)
/App_Readme/
/App_Readme/Elmah.txt
/DataServices/
/DataServices/Packages.svc
/DataServices/Routes.cs
/Packages/
/Packages/Readme.txt
/Default.aspx
/favicon.ico
/packages.config
同時Web.config也被修改,添加了一些配置項
7. 至此NuGet.Server站點已經創建完畢,恩,你沒有看錯,就是這么簡單,接下來部署到本地或IIS站點即可使用了
1. 發布網站到本地
2. IIS里面建立站點www.mynuget.com,主機頭www.mynuget.com,應用程序池為.Net4.0集成模式,目錄指向站點發布的目錄
3. 設置hosts 將www.mynuget.com執向本機
4. 設置好hosts后,重新打開瀏覽器輸入網址:http://www.mynuget.com/
5. 查看已經發布的類庫包 http://www.mynuget.com/nuget/Packages (可以把已經打好包的類庫放到網站下的Packages文件夾下即可)
1. 選擇 工具-->Library Package Manager-->Package Manager Settings
2. 輸入名稱 MyNuGetServer及包包源地址 http://www.mynuget.com/nuget 點擊Add完成源添加
7. 查看剛剛添加的類庫源 工具-->Library Package Manager-->Manager NuGet Packages for Solution... 點擊剛添加的源MyNuGetServer可以看到我們放到站點下的類庫包,選中需要的包包點擊 Install完成安裝
8. 也可以在控制台下安裝,將類庫源執行我們建立的源 MyNuGetServer,控制台下輸入Install-Package Winista.HtmlParser完成安裝
現在我們已經成功的搭建了自己的NuGet服務器。
注意點:
1. NuGet包包是放置在站點根目錄下面的Packages文件夾下,如需要改變可以在配置文件packagesPath中進行設置,可以設置為相對目錄或者物理目錄
<appSettings> <!-- Change the path to the packages folder. Default is ~/Packages. This can be a virtual or physical path. --> <add key="packagesPath" value="" /> </appSettings>
2. 如何管理我們的包包,可以根據需要自行寫個上傳下載的文件管理功能,需要時上傳到Packages文件下,不需要了刪除即可,也可以像我一樣寫了個FTP服務,使用ftp上傳下載
3. 最好是為NuGet單獨建立個站點這樣管理着方便,若不方便建立獨立站點可以隨便找個現有的web站點,在里面安裝NuGet.Server然后發布即可
回頭看整個過程:安裝NuGet擴展,下載網上的類庫包供自己使用,打包自己的類庫,搭建自己的NuGet服務器,整個流程基本走完了,剩下的就是我們如何去利用好NuGet這個強大的工具了。