如何在 Visual Studio 在线构建定义中将参数传递给 NuGet?

How do I pass parameters to NuGet in a Visual Studio Online Build definition?

我有一个包含多个项目的解决方案,其中已签入 TFS(Visual Studio Team Services)。我只希望构建其中一个项目(及其依赖项)并将其部署到我创建的 Azure 网站。根据 this guide,我的解决方案及其项目遵循 NuGet 2.7+ 自动包还原方法。在我的本地 Visual Studio 2013 环境中,一切都按预期工作。

我使用 this guide 在 Team Services 中创建了一个非常基本的部署构建,但构建失败并出现有关 NuGet 的错误:

******************************************************************************
Running tasks
******************************************************************************
******************************************************************************
Starting task: Build solution $/Path/To/My/Project.csproj
******************************************************************************
Executing the powershell script: C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\default\tasks\VSBuild.0.16\VSBuild.ps1
C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\default\agent\worker\tools\NuGet.exe restore "C:\a\s\Path\To\My\Project.csproj" -NonInteractive
MSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files (x86)\MSBuild.0\bin'.
Cannot determine the packages folder to restore NuGet packages. Please specify either -PackagesDirectory or -SolutionDirectory.
Unexpected exit code 1 returned from tool NuGet.exe

我的问题是:我该怎么做 specify either -PackagesDirectory or -SolutionDirectory?我找不到与此相关的任何文档。

或者,也许我完全以错误的方式处理这个问题?

首先,您似乎使用了过时的 NuGet 包还原方法(在版本控制中使用 .nuget 文件夹)。有关此方法的局限性的文章,请参阅 this blog post

如果您需要将特定参数传递给 nuget.exe 以进行包恢复,您应该使用单独的 "NuGet Installer" 任务,它有一个 "NuGet Arguments" 参数,您可以在其中为nuget.exe restore命令。

如果您使用 "NuGet Installer" 任务进行包恢复,您可以禁用 "Visual Studio Build" 任务中的 "Restore NuGet Packages" 选项。