1. 程式人生 > >你的團隊需要一個正確的程式集(dll)管理姿勢

你的團隊需要一個正確的程式集(dll)管理姿勢

很多團隊經歷時間的積澱之後,都會有很多的可重用的公共技術元件。大部分的團隊都會把這些公共元件生成程式集(dll)後,放到GIT或SVN的一個公共目錄裡面,以供各個專案中使用。起初在專案很少又或者是公共元件不多的時候,這樣看起來也沒有多大問題。但是隨著團隊越來越大,專案的元件增多,所封裝的可重用元件越來越多,一些問題就會慢慢暴露出來。這個時候如果還是使用這種方式去管理程式集,顯然就不太合適了。 我們知道,在Java中比較常用的包管理工具,如Maven。實際上在很多大公司裡面都會搭建自己公司的Maven私服,以管理公司的一些公共技術元件。 實際上在.net中也有,大家也絕對不陌生,就是Nuget, 相信每個人都從官方的nuget伺服器上下載過一些第三方元件,如:log4net、quartz.net等等。 Nuget是一個.NET平臺下的開源的專案,它是Visual Studio的擴充套件。在使用Visual Studio開發基於.NET Framework的應用時,Nuget能把在專案中新增、移除和更新引用的工作變得更加快捷方便。這是維基百科中的定義,實際上Nuget就是一個包管理器,類似於Java的Maven,可以幫助我們更方便的管理dll,這也是微軟提供給.net平臺的一個正確的包管理工具。 而如Maven一樣,Nuget也可以搭建自己的私服。這篇文章就來簡單介紹一下如何搭建屬於你們團隊自己的Nuget伺服器。 ### 一、下載Nuget.Server     從官方Nuget伺服器上搜索nuget.server,點選專案url中的github路徑。從github中下載nuget.server的原始碼。 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625113552103-109706720.png) 下載並解壓後的檔案路徑如下圖所示: ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625113951128-1503563884.png) ### 二、搭建Nuget.Server 1. 開啟專案檔案NuGet.Server.sln,找到NuGet.Server,右鍵釋出,選擇檔案系統(跟釋出web程式一樣,釋出到IIS中)。 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625114642621-262211103.png) 2. IIS新建站點MyNuGet ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625114859263-2006416616.png) 啟動程式出現以下頁面代表搭建成功 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625115218641-1622168019.png) 3. 注意:若點選here出現404頁面如下圖所示: ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180625115706412-729145768.png) 可以通過VS執行起來Nuget.Server專案,然後將bin目錄替換IIS下的bin目錄,即可解決。出現下圖代表搭建成功 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627102545835-1004233709.png) 開啟VS的Nuget管理器,點選圖中設定圖示,新建我們自己的nuget伺服器 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627103124004-1628086707.png) 之後就可以連上我們自己搭建的伺服器了 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627103239225-49848535.png) ### 三、自建NuGet基本使用 1. 下載NuGet命令列打包工具nuget.exe 下載地址:https://www.nuget.org/downloads 2. 打包我們程式 * 方式1:通過類庫檔案csproj的方式打包 首先開啟我們程式的AssemblyInfo.cs檔案修改程式集資訊 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627104018738-2049830247.png) 使用nuget.exe打包程式集
在.csproj檔案目錄下執行命令spec ``` nuget.exe spec //spec 在.csproj檔案目錄下執行命令 ``` ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627104333535-1316984971.png) 此時會生成一個.nuspec檔案,開啟這個檔案 修改其中的xml屬性即可(注意此處一些資訊最好和AssemblyInfo.cs中的程式集資訊一致) ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627105343352-1672213188.png) 修改完成後繼續執行pack命令 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627105438149-788832720.png) 這時將生成的.nupkg檔案直接copy到nuget伺服器IIS目錄下的packages資料夾內即可 也可通過命令push推送至nuget伺服器 ``` nuget push *.nupkg -s http://127.0.0.1:8005 123456 //push 程式包路徑 選項 地址 apikey //apikey 可以在伺服器webconfig中配置 ``` 完成後即可檢視或使用我們釋出的程式集 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627113647970-1188544280.png) ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627113704127-1201145466.png) ### 四、問題 如果你認為以上就結束了,那你就太天真了,實際上,我們團隊在搭建與使用過程中還是遇到了很多問題的,如果搭建使用中踩到了同樣的坑可以參考下面幾點。 1. 在剛開始使用的時候經常因為失誤或者程式有問題從而導致需要重新發布nuget包,但是發現覆蓋掉原來的之後,專案裡更新下來的始終還是原來的程式。 解決:慎重慎重再慎重打包,需要重新發布包的時候可以升級,不能覆蓋。(當時認為這個東西只能升級不能覆蓋) 2. 用了一段時間後,由於當時至提供了nuget管理包的技術方案,卻沒有相應的使用規範與制度,導致團隊nuget包混亂,開發人員胡亂升級,胡亂引用nuget包,終於有一天造成大問題。因此需要制定一個完善的使用規範與制度,包括如何打包,如何釋出,誰來打包,誰來發布,慎重打包、升級、專人管理等 3. 由於問題2引起的問題,因此決定重新整理nuget包(不破不立),於是重新搭建了一個nuget伺服器,重新規整雖有的程式集、元件、重新打包釋出等,但是發現遷移到新的後,專案中下載下來的程式集還是原來的。(又遇到了問題1)。這次靈感一來發現問題解決方案。VS2017通過工具->選項->清除所有NuGet快取 再重新下載包問題即可解決 ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627114835612-1565198402.png) 若沒有VS2017或找不到清楚NuGet快取選項,也可找到自己機器上nuget的快取資料夾刪除掉裡面對應的內容也可以,一般是在C:\Users\Administrator\.nuget ![](https://images2018.cnblogs.com/blog/740814/201806/740814-20180627115244329-208915392.png) ### 小結 今天簡單介紹瞭如何搭建自己團隊的Nuget伺服器,以及如何打包併發布程式集到Nuget。實際上,大多數的.net團隊仍然是在用SVN或GIT的方式去管理dll,包括我所在的某大廠,雖然後來框架研發部,提供了一個自主研發的管理工具,但我個人感覺還是不如Nuget更好用一些。 如果你的團隊不滿足現在的程式集管理方式,那麼不妨換個姿勢,搭建一個屬於你們團隊自己的Nuget伺服器吧!當然,如果你有更好的方式,歡迎與我留言分享!