搭建NuGet服務器

NuGet.Server是由.NET Foundation提供的一個包,用於建立一個ASP.NET應用程序,該應用程序能夠在任何運行IIS的服務器上。簡單地說,NuGet.Server在服務器上建立一個文件夾,並能夠經過HTTP(S)獲取內容。設置起來很簡單,適用於簡單的場景。html

  1. 在Visual Studio中建立一個空的ASP.NET Web應用程序,並將NuGet.Server包添加到它。
  2. 配置應用程序中的Packages文件夾並添加軟件包。
  3. 將應用程序部署到合適的服務器。

如下爲建立ASP.NET Web應用程序的詳細步驟。web

使用NuGet.Server建立和部署ASP.NET Web應用程序

  1. 在Visual Studio中,選擇File> New> Project,搜索「ASP.NET」,爲C#選擇ASP.NET Web應用程序(.NET Framework)模板,並將Framework設置爲「.NET Framework 4.6」:api

  2. 爲應用程序提供除NuGet.Server之外的合適名稱,好比上圖的MyServer,選擇OK,而後在下一個對話框中選擇模板,而後選擇肯定安全

  3. 右鍵單擊該項目,選擇管理NuGet包服務器

  4. 在Package Manager UI中,選擇Browse選項卡,而後搜索並安裝最新版本的NuGet.Server包(若是您的目標是.NET Framework 4.6)。(您也可使用軟件包管理器控制檯進行安裝Install-Package NuGet.Server。)若是出現提示,請接受許可條款。網絡

  5. 安裝NuGet.Server將空的Web應用程序轉換爲軟件包源代碼。它安裝了各類其餘軟件包,Packages在應用程序中建立一個文件夾,並修改web.config以配置其餘信息(請參閱該文件中的註釋以獲取詳細信息)。app

    注意:框架

    在NuGet.Server包完成對web.config文件的修改以後,仔細檢查它NuGet.Server可能不會覆蓋現有的元素,而是建立重複的元素。當您稍後嘗試運行該項目時,這些重複項會致使「內部服務器錯誤」。例如,若是您在安裝NuGet.Server包以前,web.config包含<compilation debug="true" targetFramework="4.5.2" />,則NuGet.Server包不會覆蓋它,而是會插入第二個<compilation debug="true" targetFramework="4.6" />在這種狀況下,請刪除具備較舊框架版本的元素。dom

  6. 要將應用程序發佈到服務器時在源中提供包,請在Visual Studio中將每一個.nupkg文件添加Packages文件夾中,而後將每一個文件的「 生成操做」設置爲「 內容」並將「 複製到輸出目錄」設置「始終複製(右鍵>屬性)佈局

  7. 在Visual Studio中本地運行站點(F5)。主頁提供了NuGet服務器網址,以下所示。若是您看到錯誤,請仔細檢查您web.config的重複元素是否在前面的步驟5中提到。

  8. 點擊上圖圈出來的here能夠看到關於包的信息。

  9. 第一次運行應用程序時,NuGet.Server從新構建Packages文件夾以包含每一個軟件包的文件夾。與NuGet 3.3引入本地存儲佈局相匹配,目的是提升性能。添加更多軟件包時,請繼續遵循此結構,如上圖。

  10. 本地測試經過後,根據須要將應用程序部署到其餘內部或外部站點。

  11. 一旦部署到http://<domain>,您用於軟件包源的URL將會是http://<domain>/nuget

配置Packages文件夾

NuGet.Server1.5及更高版本中,您能夠在web.config文件中,修改appSetting/packagesPath的自定義包文件夾路徑

<appSettings> <!-- Set the value here to specify your custom packages folder. --> <add key="packagesPath" value="C:\MyPackages" /> </appSettings> 

packagesPath 能夠是絕對路徑或虛擬路徑。

packagesPath省略或保留爲空時,packages文件夾是默認值~/Packages

從外部向包服務器添加包

一旦NuGet.Server站點運行,您可使用nuget push 添加軟件包,只要您在web.config中設置API密鑰值。

安裝NuGet.Server包後,web.config包含一個空appSetting/apiKey值:

<appSettings> <add key="apiKey" value="" /> </appSettings> 

apiKey省略或空白時,將包推送到包服務器功能將被禁用。

要啓用此功能,請將該apiKey設置爲一個值(理想狀況下爲強密碼),並確保appSettings/requireApiKey值爲true

<appSettings> <!-- Sets whether an API Key is required to push/delete packages --> <add key="requireApiKey" value="true" /> <!-- Set a shared password (for all users) to push/delete packages --> <add key="apiKey" value="" /> </appSettings> 

若是您的服務器已經安全,或者您不須要API密鑰(例如,在本地團隊網絡上使用私有服務器時),則能夠設置requireApiKeyfalse全部有權訪問服務器的用戶均可以往此包服務器推送軟件包。

從包服務器中移除包裹

使用NuGet.Server時,nuget delete命令會從存儲庫中刪除一個包,只要您將API密鑰包含在註釋中便可。

若是您想要改變行爲來取消包(將其保留爲包恢復),請將web.config中的enableDelisting鍵更改成true。

相關文章
相關標籤/搜索