用NuGet.Server管好自家的包包


每一個成功產品的背后至少有一個偉大的類庫,每一個偉大的類庫都歸屬於一個優秀的包包(package),每一個優秀的包包都離不開一個順手的包包管理器。而NuGet是.NET程序員首選的包包管理器。

這篇文章分享的是如何用NuGet.Server搭建自己的NuGet服務器,如何上傳包包,以及我們使用中遇到的問題與自動化打包/上傳方案。

一、NuGet服務端的搭建

准備材料:IIS + ASP.NET 4.0 + VS2010 + NuGet.Server

1. 打開VS2010,新建一個ASP.NET Empty Web Application項目

2. 通過NuGet安裝NuGet.Server

上圖中的Packages文件夾是安裝NuGet.Server時自動生成的,它就是存放包包的倉庫。

3. 在web.config > appSettings 中設置存放包包的倉庫的路徑

  <appSettings>
    <add key="packagesPath" value="~/Packages" />
  </appSettings>

4. 在web.config > appSettings 中設置apiKey,上傳包包時,需要通過這個apiKey進行驗證。

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

5. 在IIS中為這個項目創建一個Web站點,然后通過瀏覽器訪問,如果設置正確,會出現如下的頁面:

二、客戶端打包/上傳包包

1. 打包,也就是生成.nupkg文件

有三種方式:

a) 通過nuget pack命令

比如,我們對一個名稱為“項目A”的VS2010項目進行打包,對應的命令行是:

nuget pack 項目A.csproj -Build -Properties Configuration=Release

運行該命令后,nuget會自動調用msbuild以Release方式編譯該項目並在當前文件夾中生成“項目A.nupkg”。

b) 在Visual Studio編譯時自動打包

先要在VS2010中啟用Eable NuGet Package Restore,然后修改發布項目的.csproj文件,在PropertyGroup中添加<BuildPackage>true</BuildPackage>,如下圖:

這樣設置后,Visual Studio編譯該項目時會自動在bin文件夾中生成對應的.nupkg文件。

c) 通過msbuild命令在編譯時進行打包

比如,在命令行中運行下面的命令:

msbuild CNBlogs.Infrastructure.Logging.csproj /p:BuildPackage=true

注:通過msbuild傳參數不需要修改任何配置文件,這樣可以很方便地進行自動化。

2. 上傳至NuGet服務器

 通過nuget push命令進行上傳,比如:

nuget push 項目A.nupkg -s http://nuget.cnblogs.com 12345trewq

注:項目A.nupkg是包包的名稱,http://nuget.cnblogs.com是NuGet Server網址,12345trewq是之前在web.config中設置的apiKey。

【遇到的問題】

開始時,我們執行這個命令后,出現錯誤:

Failed to process request. 'Method Not Allowed'.
The remote server returned an error: (405) Method Not Allowed..

產生這個錯誤是由於IIS安裝了WebDAV模塊:

刪除WebDAV Module與WebDAV Hanlder,上傳時會返回404錯誤,通過瀏覽器訪問路徑nuget/Packages也是404錯誤。

查看IIS日志發現nuget push實際執行的是HTTP PUT操作 —— PUT /api/v2/package/,WebDAV不允許這個操作。

根據網上的說法,必須要卸載WebDAV,可是這台服務器上有一個站點需要它,后來將NuGet Server安裝到另外一台服務器解決了這個問題。

3. 打包/上傳一條龍

a) 通過批處理實現

優點:可自動化,可一次打包/上傳多個項目。

批處理示例:

nuget pack ..\CNBlogs.Domain.Core\CNBlogs.Domain.Core.csproj -Build -Properties Configuration=Release
nuget pack ..\CNBlogs.Bootstrap\CNBlogs.Bootstrap.csproj -Build -Properties Configuration=Release
nuget pack ..\CNBlogs.Presentation.Web\CNBlogs.Presentation.Web.csproj -Build -Properties Configuration=Release
nuget push *.nupkg -s http://nuget.cnblogs.com 12345trewq

目前我們采用的就是這個方法。

b) 通過圖形界面工具NuGetPackageExplorer實現

優點:操作方便

缺點:不能一次處理多個項目,不能自動化

具體操作方法,請閱讀NuGet學習筆記(2) 使用圖形化界面打包自己的類庫

三、打包/上傳自動化的進一步解決方案

該解決方案還沒實現,這里只是分享一下我們的思路。

通過一個ASP.NET MVC程序實現,名稱叫“一鍵發包”。

操作流程:

在瀏覽器中選擇要發布至NuGet服務器的項目名稱並點擊“Push” -> 服務端自動運行Git命令從代碼庫中獲取該項目的代碼 -> 自動運行msbuild命令編譯該項目並生成.nupkg文件(msbuild projectname.csproj /p:BuildPackage=true)-> 自動運行nuget push命令發布至NuGet服務器(nuget push)。

 

相關鏈接:

程序員,用NuGet管理好你的包包

NuGet學習筆記(2) 使用圖形化界面打包自己的類庫

NuGet學習筆記(3) 搭建屬於自己的NuGet服務器

Hosting Your Own NuGet Feeds 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM