我正在尝试将基于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,我不知道如何构建它。
答案 0 :(得分:1)
我一直在阅读RestorePackagesHelper模块的documentation和source 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"}))
)