2015-01-08 19 views
1

我正在嘗試將基於CCNET的構建腳本遷移到基於F#Fake的構建腳本。我很難理解如何修改RestorePackages方法來兌現NuGet.config文件,該文件指示NuGet將軟件包放置在我們存儲庫中幾層深的名爲「外部」的文件夾中。如何指示RestorePackages將NuGet.config文件的repositoryPath用於包輸出路徑?

NuGet.config例子:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <config> 
    <add key="repositoryPath" value="Code\DotNet\External\" /> 
    </config> 
</configuration> 

的NuGet CCNET例子:

<exec executable="Tools\NuGet\nuget.exe"> 
    <buildArgs>restore $[$CCNetWorkingDirectory]\Code\DotNet\Web\All.sln</buildArgs> 
</exec> 

在上面的例子中,我只是告訴的NuGet恢復包解決方案中的所有項目。這將授予NuGet.config中的設置。

的NuGet假例如: 目標 「RestorePackages」(好玩_ - > RestorePackages() )

但是,調用RestorePackages()不榮譽NuGet.config(因爲此方法只使用默認參數),所以我的軟件包在錯誤的位置更新。

理想情況下,我想指示RestorePackages專門查看Visual Studio解決方案文件,就像我使用CCNET一樣。這可能嗎?

如果這是不可行的,我想指示RestorePackages遵守NuGet.config文件中的設置。

但是,如果兩者都不可行,我需要能夠覆蓋輸出路徑。不幸的是,我很難理解the documentation,我不知道如何構建這個。

回答

1

我一直在閱讀documentationsource code RestorePackagesHelper模塊,發現它不支持我想達到的目標,至少不是直接由於兩個限制。

限制1:無解決方案文件支持 - 當前的RestorePackage實現使用不支持傳入解決方案文件的NuGet Install Command。爲了傳遞解決方案文件,需要使用NuGet Restore Command。因此,這不是問題中列出的CCNET片段的直接僞造等價物。

限制2:無需通過ConfigFile支持 - 此外,RestorePackageParams類型不具有configfile參數,所以我不能指定我想在要使用的的NuGet恢復ConfigFile實現。

這些是目前Fake的侷限性。不是NuGet。

合理的解決方案 - 但是,通過掃描給定目錄中的所有packages.config文件併爲每個文件調用RestorePackage,我可以通過Fake實現類似的效果;每次指定OutputPath如下所示。

假的NuGet RestorePackages例

Target "RestorePackages" (fun _ -> 
    !! "./**/packages.config" 
     |> Seq.iter (RestorePackage (fun p -> 
      { p with 
       OutputPath = "./Code/DotNet/External"})) 
) 
相關問題