如何指示RestorePackages使用NuGet.config文件的repositoryPath作为包输出路径?

时间:2015-01-08 23:54:47

标签: nuget f#-fake

我正在尝试将基于CCNET的构建脚本迁移到基于F#Fake的构建脚本。我很难理解如何修改RestorePackages方法以遵守NuGet.config文件,该文件指示NuGet将包放置在我们的存储库中几层深的名为“外部”的文件夹中。

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”(有趣_ - &gt;         RestorePackages()     )

但是,调用RestorePackages()会尊重NuGet.config(因为此方法只使用默认参数),所以我的包在错误的位置更新。

理想情况下,我想指示RestorePackages专门查看Visual Studio解决方案文件,就像我使用CCNET一样。这可能吗?

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

但是,如果两者都不可行,我需要能够覆盖输出路径。不幸的是,我很难理解the documentation,我不知道如何构建它。

1 个答案:

答案 0 :(得分:1)

我一直在阅读RestorePackagesHelper模块的documentationsource code,发现它不支持我想要实现的目标,至少不是直接由于两个限制。

限制1:无解决方案文件支持 - 当前的RestorePackage实现使用不支持传入解决方案文件的NuGet Install Command。为了传入解决方案文件,需要使用NuGet Restore Command。因此,对于问题中列出的CCNET片段,这不是直接的假等效。

限制2:没有ConfigFile支持 - 此外,RestorePackageParams类型没有ConfigFile参数,因此我无法指定要用于NuGet还原的ConfigFile。

这些是假的当前限制。不是NuGet。

合理的解决方案 - 但是,通过扫描给定目录中的所有packages.config文件并为每个文件调用RestorePackage,我可以通过Fake获得类似的效果。每次指定OutputPath,如下所示。

假NuGet RestorePackages示例

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