問題的由來
最近部門,在開發的時候遇到一個問題,現在有項目A B C三個項目,項目B和C分別提供了組件庫由項目A直接引用。那么每次開打項目A獲取最新后,同時還得打開項目B C獲取最新然后編譯一次。拋開設計方面的問題,假如以后還多了項目E F G,引用和被引用,那么打開一個項目想編譯一次,還得同時打開N個項目。當時把問題反饋后,有人建議使用NuGet。
NuGet簡介
NuGet可以方便快捷添加 移除 更新 第三方類庫,常用的類庫,例如log4net,Json.net等都可以直接通過NuGet下載,如果自己編寫了些認為有用並且希望和大家分享的工具庫,也可以通過注冊賬號后,上傳上去。當然!如果不希望分享出去,特別公司內部使用的,我們可以搭建屬於自己的NuGet服務進行管理。
初識NuGet
在visual studio 2010 sp1和 2012后版本都已經自帶NuGet,如果沒有,也可以在【工具】-【拓展和更新】里下載,下載完后重啟visual studio就有了。
打開【工具】-【管理解決方案的NuGet程序包】,搜索【Json.net】,點擊安裝。當然,用熟練后你也可以打開【工具】-【程序包管理器控制台】,通過命令【Install-Package Newtonsoft.json】進行安裝
如果程序包不想用了,也可以通過上面的界面進行卸載,或者通過命令【UnInstall-Package Newtonsoft.json】進行卸載。
NuGet.Server 的搭建
上面已經提過,公司內部使用的時候,不希望將程序分享出去,只想內部共享和管理。那么你可以通過使用NuGet.Server進行搭建一個屬於你的NuGet服務。
創建一個新的Web項目【MyNuGetServer】(名字自己起),選擇模板【Empty】,框架【Web Forms】,確定
打開【工具】-【管理解決方案的NuGet程序包】,搜索【NuGet.Server】,點擊安裝。通過命令【Install-Package NuGet.Server】進行安裝
安裝完了后,打開【Web.config】,發現自動添加了很多東西,先找到<add key="apiKey" value="123456789"/>,其他可以暫時不理,【apikey】將會在上傳包的時候使用到,自己隨意填一個。假如需要發布到nuget.org也就是公開的,那么你注冊了個后NuGet的帳號后,微軟將會給一個guid的key給你,發布到nuget.org的時候將會用到。
填寫完apikey后,Ctrl+F5運行一下。出現下面的頁面證明你搭建成功了。沒錯!搭建成功了,就是怎么簡單。
隨便找一個后綴名為nupkg的,放到項目的【Packages】文件夾里,發布然后部署到IIS,具體部署到IIS的流程,我就不多說了。注意兩點,文件夾的權限和【應用程序池】選擇4.0集成
完成上面的步驟后,打開你的站點/nuget/Packages這個路徑,出現以下頁面就證明你部署成功了。如果打開的頁面有點出入,可以選擇用IE瀏覽器查看。而頁面里面顯示CalculationFormula,就是我添加上去的程序包。
這個時候,打開【工具】-【管理解決方案的NuGet程序包】-【設置】出現下面的界面,添加你部署好的nuget.server站點,注意,得加上/nuget這個路徑
點擊確定后,返回到【管理解決方案的NuGet程序包】界面,就會發現你上傳的程序包,可以顯示出來讓你安裝了。
整個搭建完成了,可以看到,nuget.server是不需要數據庫的,只要把程序包放在Packages文件夾就完事了,想對文件操作也很方便,但是我們也不會經常跑去服務器去對程序包進行更新刪除,這樣太low了。
在/nuget/Packages這個頁面看到,我們是無法操作程序包的,包括添加刪除更新。nuget約定是不允許刪除程序包的,有問題的NuGet讓你更新版本修復,當然你也可以自己創建一個操作頁面,對/nuget/Packages里的文件進行操作刪除。
那么上傳和更新呢?用命令nuget pack和nuget push,當然了,初學的用圖形化【NuGet Package Explorer】處理會更加方便
NuGet Package Explorer的使用
打開【NuGet Package Explorer】點擊【Create a new package】這個選項,拖一個dll到界面的右邊
ID:輸入名稱,也是包的唯一標識
Version:版本號,nuget是通過版本號識別是否最新版本
Description:描述,程序包的功能描述
Framework assemblies:程序包所需要引用的.net原生組件
保存后,點擊Publish,填寫你的nuget站點,並且輸入之前你設置的【apikey】,點擊Publish,上傳成功。注意不需要追加任何路徑,只要站點的url就可。
更新的話,重復上面操作,不過要修改版本號,並且版本號往上加,Nuget才會識別,有興趣的同學可以反編譯nuget.server看看
附錄:
Install-Package 安裝包 -Version 4.3.1 參數指定版本
Uninstall-Package 卸載包
Update-Package 更新包
Get-Package 默認列出本地已經安裝了的包 可以加參數 -remote -filter entityframework 來在包源中查找自己想要的包
nuget pack 打包DLL
nuget push 發布程序包
整個NuGet的使用和服務的搭建都已經完成了,類似的文章,我相信也很多園子里會有很多,為了方便自己回顧,順便和大家分享,因此將研究成果記錄了下來。如果有問題,請下面評論反饋給我,謝謝。