2015-09-27 45 views
3

我有很多ASP.NET Web窗體網站(沒有.csproj文件的網站),我想弄清楚如何最好地使用NuGet與他們打包。在使用Visual Studio 2015時,通過UI添加NuGet包可正常工作(站點根目錄中有一個packages.config),並且構建將刪除bin文件夾中的二進制文件。如何使用CI服務器上的ASP.NET網站使用NuGet包

問題是試圖通過MSBuild在TeamCity上構建項目。對於其他項目,我可以使用NuGet.exe和restore命令(針對csproj或sln文件),並且正確下載包並將其包含在輸出中。但是,這不適用於網站,因此由於缺少文件而導致編譯失敗。

作爲最後的手段,我可​​以寫一個自定義腳本/構建步驟來手動將程序集複製到bin文件夾,但我想避免這種情況。我錯過了什麼嗎?有沒有辦法將NuGet與Visual Studio以外的網站一起使用?

+0

並不理想,但你可以提交的NuGet包到存儲庫,而不是使用包還原功能呢? – Aaron

回答

1

過了一段時間,我有一個解決方法,讓我在需要的地方,儘管不是最好的方式。

在較新版本的Visual Studio中,當二進制依賴項通過VS添加到網站時,它會將(binaryfile).dll.refresh文件添加到二進制文件旁邊的bin文件夾中。該文件的內容是通過解決方案的packages文件夾到.dll的相對路徑。另外,一個packages.config文件被添加到網站上。

的方式來獲得它來建立一個CI服務器是:

  1. 忽略(的.gitignore,.hgignore)的網站的bin文件夾
  2. 明確的bin添加.REFRESH文件(S)文件夾
  3. 在實際構建之前,調用NuGet restore,傳入網站packages.config的路徑並將PackagesDirectory(或SolutionDirectory)設置爲解決方案的packages文件夾
  4. 預編譯,MSBuild將打開每個刷新文件,並從位置co複製文件ined在文件中。

這不是一個好的解決方案,因爲我現在必須多次調用NuGet恢復(解決方案一次,每個網站一次),但它確實有效。我不知道支持.refresh文件有多遠,但它在2015年有效。我可以在NuGet中進行更改請求,以允許通過命令行傳遞多個solutions/packages.configs。

感謝, 埃裏克

相關問題