使用NuGet.Server搭建公司内部的Nuget(包)管理器
前言
Nuget是一個.NET平台下的開源的項目,它是Visual Studio的擴充。在使用Visual Studio開發基于.NET Framework的應用時,Nuget能把在項目中添加、移除和更新引用的工作變得更加快捷友善。這是維基百科中的定義,實際上Nuget就是一個包管理器,類似于Java的Maven,可以幫助我們更友善的管理dll。
相信每個人都從官方的nuget伺服器上下載下傳過一些第三方元件。如:log4net、quartz.net等。實際上随着公司業務慢慢的拓展,項目也會越來越來多,很多項目會依賴其他項目DLL,比如一些底層的技術元件項目多,交叉引用多,這個時候對這些DLL的管理就至關重要。起初我們公司的方案是把這些公共的元件放到SVN的一個目錄下,然後大家更新到本地,然後添加引用到項目裡。這種方式管理起來較為複雜,而且必須要求所有項目人員的SVN更新路徑必須是一緻的。起初項目較少,項目之間沒什麼依賴,可重用的元件也不多,用起來沒什麼問題,但随着項目越來越多,可重用的元件也越來越多,引用越來越複雜,這個時候這些元件管理起來就很吃力了。
以上問題并沒有意識到,我是在做Jenkisn持續內建與自動化釋出的時候發現Jenkins把SVN更新到自己的工作空間内時,并不能更新到這些依賴的元件(因為這些公共的元件不在項目的SVN工作目錄内),導緻建構失敗的時候,苦思良久才想到搭建我們公司自己的Nuget伺服器,來管理這些元件的。等真正用起來之後才覺得,可能正規軍都這麼玩,我們之前那種方式隻是野路子。
系列文章
.NET實作持續內建與自動化部署1-Jenkins
.NET實作持續內建與自動化部署2-NuGet
.NET實作持續內建與自動化部署3-測試環境到生産環境政策
一、下載下傳Nuget.Server
從官方Nuget伺服器上搜尋nuget.server,點選項目url中的github路徑。從github中下載下傳nuget.server的源碼。

下載下傳并解壓後的檔案路徑如下圖所示:
二、搭建Nuget.Server
- 打開項目檔案NuGet.Server.sln,找到NuGet.Server,右鍵釋出,選擇檔案系統(跟釋出web程式一樣,釋出到IIS中)。
.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 - IIS建立站點MyNuGet 啟動程式出現以下頁面代表搭建成功
.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 .NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 - 注意:若點選here出現404頁面如下圖所示: 可以通過VS運作起來Nuget.Server項目,然後将bin目錄替換IIS下的bin目錄,即可解決。出現下圖代表搭建成功
.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 打開VS的Nuget管理器,點選圖中設定圖示,建立我們自己的nuget伺服器.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 之後就可以連上我們自己搭建的伺服器了.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 .NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器
三、自建NuGet基本使用
-
下載下傳NuGet指令行打包工具nuget.exe
下載下傳位址:https://www.nuget.org/downloads
- 打包我們程式
-
方式1:通過類庫檔案csproj的方式打包
首先打開我們程式的AssemblyInfo.cs檔案修改程式集資訊
.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器
使用nuget.exe打包程式集
在.csproj檔案目錄下執行指令spec
nuget.exe spec //spec 在.csproj檔案目錄下執行指令
此時會生成一個.nuspec檔案,打開這個檔案
修改其中的xml屬性即可(注意此處一些資訊最好和AssemblyInfo.cs中的程式集資訊一緻)
修改完成後繼續執行pack指令
這時将生成的.nupkg檔案直接copy到nuget伺服器IIS目錄下的packages檔案夾内即可
也可通過指令push推送至nuget伺服器
nuget push *.nupkg -s http://127.0.0.1:8005 123456 //push 程式包路徑 選項 位址 apikey
//apikey 可以在伺服器webconfig中配置
完成後即可檢視或使用我們釋出的程式集
四、問題
-
在剛開始使用的時候經常因為失誤或者程式有問題進而導緻需要重新釋出nuget包,但是發現覆寫掉原來的之後,項目裡更新下來的始終還是原來的程式。
解決:慎重慎重再慎重打包,需要重新釋出包的時候可以更新,不能覆寫。(當時認為這個東西隻能更新不能覆寫)
- 用了一段時間後,由于當時至提供了nuget管理包的技術方案,卻沒有相應的使用規範與制度,導緻團隊nuget包混亂,開發人員胡亂更新,胡亂引用nuget包,終于有一天造成大問題。是以需要制定一個完善的使用規範與制度,包括如何打包,如何釋出,誰來打包,誰來釋出,慎重打包、更新、專人管理等
- 由于問題2引起的問題,是以決定重新整理nuget包(不破不立),于是重新搭建了一個nuget伺服器,重新規整雖有的程式集、元件、重新打包釋出等,但是發現遷移到新的後,項目中下載下傳下來的程式集還是原來的。(又遇到了問題1)。這次靈感一來發現問題解決方案。VS2017通過工具->選項->清除所有NuGet緩存 再重新下載下傳包問題即可解決 若沒有VS2017或找不到清楚NuGet緩存選項,也可找到自己機器上nuget的緩存檔案夾删除掉裡面對應的内容也可以,一般是在C:\Users\Administrator.nuget
.NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器 .NET持續內建與自動化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器