還在揮汗徒手安裝程式庫? 試試NuGet吧
6 | 73,520 |
不知道大家是否有在Visual Studio專案中引用過log4net、ELMAH之類的Open Source程式庫,或加入包含css, jpg, js複雜jQuery Plugin的經驗?
在ASP.NET專案裡引用某些Javascript或.NET程式庫,所需的安裝工作常常不只Copy一個dll或js檔這麼簡單,有時還需複製相關的js, css, jpg, gif 放在特定目錄下,有時還必須修改web.config加入適當的httpHandler、httpModule及專屬設定才能讓.NET程式元件順利運作。依我自己的經驗,要是沒耐性看完安裝文件仔細核對,常會落得丟三落四無法運作的下場。在專案中加入程式庫,難道不能像裝軟體一樣,按下一步下一步就搞定?
NuGet是一個簡化程式庫安裝程序的Visual Studio 2010延伸套件,由微軟RD與開發社群共同開發,以Open Source方式釋出。透過NuGet,能有效簡化程式庫的安裝程序,另外還提供版本更新、移除等功能,將下載安裝程式庫的動作簡化到點一下滑鼠就完成。
要取得NuGet,可使用VS2010的Extension Manager搜尋nuget,可以找到NuGet Package Manager這個套件。(若你有安裝ASP.NET MVC3,NuGet也會被一併安裝,或是獨立執行安裝程式也可以,但透過Extension Manager較簡便)
安裝完成後,在Solution Explorer上按右鍵,會出現一個新選項"Add Library Package Reference"。
以在ASP.NET專案加入ELMAH為例,如果手動安裝ELMAH,我們需要Copy elmah.dll到bin,修改web.config加入configureSection及httpHandler, httpModule等設定,現在看看NuGet可以怎麼幫我們省力?
點選它後就會出現很像"Add Reference"選取DLL的對話框,選取Online頁籤,會出現一大票NuGet Package(我姑且將它翻譯成程式包)的清單,在右上方可輸入elmah關鍵字,可對清單進行篩選,只留下elmah程式包。([2011-05-17更新]elmah Package 1.2起另外分出了elmah.qs,elmah程式包只有elmah.dll,elmah.qs則包含了自動加入web.config設定。)
點選Install鈕,VS2010就會自動下載並安裝ELMAH程式包到專案中。
安裝完成後,可發現Bin下多了一個Elmah.dll,而web.config中也冒出了一些設定,只要再補上errorLog、資安管控等設定,ELMAH就可順利啟用了! 另外,專案還會多了一個packages.config檔案,記錄目前已安裝的程式包、版本等資訊。點選上圖的Installed Packages頁籤,會列出現已安裝的程式包,旁邊則有一個"Uninstall"鈕,按下後就會移除Elmah.dll並還原對web.config的修改;Updates頁籤則能協助檢查程式庫是否已有新版,如有需要,按一下鈕就能完成更新。
很方便吧?
NuGet預設的程式包來源來自NuGet Gallery(http://nuget.org)網站,目前還是Beta性質,功能也還很陽春,但已經有近900個程式包可供下載安裝。
NuGet Gallery有很深的社群共同經營色彩,所以只要註冊成會員,任何人都可以上載自己打包好的NuGet程式包,貢獻分享自己的成果。微軟在NuGet Gallery也只是社群成員的角色,提供了一些官方版程式包,而NuGet Gallery的管理團隊,目前對於上傳的Package也不做任何審查。但我猜隨著應用深度與廣度的改變,未來終究還是會需要某種程度的審查及管理機制維護秩序,NuGet Gallery還非常年輕(2011年1月才剛誕生),還需要時間調整、成熟。
NuGet Gallery目前提供了下載次數統計,未來會再補上評分機制(Rating)、評論留言(Comment),是不是挺像iPhone/Android/WP7 Market軟體商店的概念? 說不定有一天還可以衍生出付費下載安裝程式庫的商業模式,讓只會寫工具程式不會寫精美手機軟體的窮酸工程師也能靠寫程式賺些微薄外快,哈! (謎之聲: 想太多了,這位大叔!)
【延伸閱讀】
- Phil Haack對NuGet 1.1的介紹
- CodePlex上佛心來著的NuGet使用說明書 (包含NuGet程式包開發指南)
- David Ebbo對於NuGet Gallery的介紹
Comments
# by Demo
想請教一下,假設有packageA與packageB這兩個自製的package,而在packageA中會使用packageB的元件,當使用者"未告知"的情況下只下載到packageA,NuGet是否有提供自動偵測並載入packageB,期待你的回答~謝謝
# by Jeffrey
to Demo, 程式包可指定與其他程式包的相依性(Dependency),NuGet Package Manager在安裝時,會自動先下載並安裝其依賴的其他程式包(包含比對版號),挺方便的。可參考: http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution
# by Demo
to Jeffrey: 謝謝您!!!
# by 爱让一切都对了
这就有点像linux里的软件包管理了,这样挺好的。谢谢介绍。
# by Samuel Liang
M$從Linux/Java吸收不少好點子耶!NuGet這類的工具,我猜應該就是從Java的Maven那邊得到的靈感吧!
# by 為什麼
結果到今年還是不審核wwwww