2016-08-02 98 views
0

我想配置一個具有NuGet程序包引用的項目的自動構建,但我沒有任何運氣。 (僅供參考,我仍然在所有這些耳朵後面都很溼,所以請提供簡單的步驟和/或配置。)TFS NuGet安裝程序構建步驟不起作用

注意:這不是其他類似問題的重複,因爲我使用一箇中央軟件包庫。其他類似的問題沒有提到這個重要的細節,所以應該假定它們不相關。

構建運行良好,沒有參考。我加入Newtonsoft.Json並綁定到它通過包括這種簡單的結構:

Dim eHandling As Newtonsoft.Json.ConstructorHandling 
eHandling = Newtonsoft.Json.ConstructorHandling.Default 

我檢查並構建開始,但的NuGet沒有先複製裝配到我的應用程序的文件夾bin。但是,它確實將其複製到這裏:

Restoring NuGet package Newtonsoft.Json.9.0.1. 
Adding package 'Newtonsoft.Json.9.0.1' to folder 'C:\Agent\_work\1\s\packages' 

自然,構建失敗,因爲它無法找到依賴關係。

值得一提的是,我用我的開發機器上的中央包庫:

<config> 
    <add key="repositoryPath" value="D:\Dev\Packages" /> 
</config> 

我想效仿服務器上的此行爲爲好,例如C:\Packages\*\*.nupkg

我嘗試使用標準%AppData%\NuGet\NuGet.config文件,但構建忽略它。我嘗試了this answer中的建議(使用repositoryPath而不是packageSources,如圖所示),但這會導致服務器掛起,直到我重新啓動VSO代理服務。考慮到這可能是一個權限問題,我重新配置代理以在位置NuGet.config的位置關聯的用戶帳戶下運行。仍然沒有運氣。沒有建立。

如何讓NuGet在運行構建步驟之前下載並填充服務器上的中央軟件包存儲庫,然後將相應的依賴項複製到應用程序bin文件夾中?

編輯1

更新:顯然東西的工作,因爲我現在已經在服務器上C:\Packages\Newtonsoft.Json.9.0.1文件夾。但是,在構建之前,程序集仍然不會被複制到應用程序bin文件夾中。同樣的結果。構建失敗。

EDIT 2

OK,我越來越近。我在服務器上創建了D:驅動器,並將本地repositoryPath的值設置爲D:\Dev\Packages,與我的開發機器上的值相同。構建仍然失敗,但快速瀏覽項目XML揭示了這一點:

<Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> 
    <HintPath>..\..\..\Packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath> 
    <Private>True</Private> 
</Reference> 

如何處理相對路徑?這應該解決它,是嗎?

編輯3

OK,那工作。我編輯了項目並將HintPath更改爲

D:\Dev\Packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll 

我現在已經成功構建。

但是,這會變得真正枯燥乏味。當然,我不會爲每個單個項目中的每一個NuGet參考都做這件事,過去的現在和將來...我是嗎?

回答

1

好吧,明白了。

只要服務器上的repositoryPath文件夾的深度與我們開發機器上的深度相同(與構建代理放置項目文件的文件夾相關),我們可以將其放在我們想要的任何位置並保留項目文件中的相對值HintPath

例如,在我來說,我結束了對服務器位置設置爲C:\Agent\Build\Packages,我的dev的機器匹配本地的Git回購分層位置:

D:\Dev\Packages 
D:\Dev\Git\app.repo\App\App.vbproj 

的偉大工程。

EDIT

只是爲了澄清,從包文件夾中的組件複製到應用bin文件夾的作用,並不的NuGet動作。這是一個MsBuild操作(即項目的程序集引用屬性中的CopyLocal設置)。

它失敗的原因是MsBuild根據項目文件中指定的相對引用無法找到要複製的程序集。

所以技術上我的問題標題是不正確的。 NuGet Installer步驟一直工作良好。