恢复msbuild 15项目中的nuget包

恢复msbuild 15项目中的nuget包,nuget,azure-pipelines,Nuget,Azure Pipelines,我想从包含msbuild 15个项目的解决方案中的私有提要(vsts内部提要)恢复nuget包,然后构建(并打包)这些项目 我正在使用VS2017托管代理,我需要构建它 我已尝试在启用(不推荐使用的)包还原的情况下使用msbuild进行还原。这将导致不恢复任何包。日志的相关部分: 2017-04-03T12:21:23.5543508Z###[警告]不推荐使用“还原NuGet软件包”选项。要在生成中恢复NuGet软件包,请将NuGet安装程序任务添加到生成定义中 2017-04-03T12:21

我想从包含msbuild 15个项目的解决方案中的私有提要(vsts内部提要)恢复nuget包,然后构建(并打包)这些项目

我正在使用VS2017托管代理,我需要构建它

我已尝试在启用(不推荐使用的)包还原的情况下使用msbuild进行还原。这将导致不恢复任何包。日志的相关部分:

2017-04-03T12:21:23.5543508Z###[警告]不推荐使用“还原NuGet软件包”选项。要在生成中恢复NuGet软件包,请将NuGet安装程序任务添加到生成定义中

2017-04-03T12:21:23.5803410Z##[命令]“C:\LR\MMS\Services\MMS\TaskAgentProvisioner\Tools\agents\2.115.0\externals\nuget\nuget.exe”restore“C:\a\1\s\mysolution.sln”-非交互式

2017-04-03T12:21:24.5231560Z MSBuild自动检测:使用“C:\Windows\Microsoft.NET\Framework\v4.0.30319”中的MSBuild版本“4.0”

我已尝试使用nuget安装程序任务进行恢复。这与

2017-04-03T12:21:05.3231625Z[命令]C:\a_tasks\NuGetInstaller_333b11bd-d341-40d9-afcf-b32d5ce6f23b\0.2.29\node_modules\nuget task common\nuget\3.5.0\nuget.exe restore-非交互式C:\a\1\s\mysolution.sln-详细信息-msbuildversion 15

2017-04-03T12:21:07.5100892Z NuGet版本:3.5.0.1938

2017-04-03T12:21:07.8293660Z System.AggregateException:发生一个或多个错误

--->NuGet.CommandLine.CommandLineException:未能加载msbuild工具集

--->System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.Build,Version=14.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件

请注意,我将
msbuildversion-15
作为附加参数传入,但nuget似乎试图加载MSBuild14

我已尝试使用dontnet cli进行还原
dotnet还原
。这与

2017-04-03T12:21:08.3424716Z[命令]C:\Program Files\dotnet\dotnet.exe还原C:\a\1\s\path\to\my\csproj

2017-04-03T12:21:12.8146350Z正在为C:\a\1\s\path\to\my\csproj还原程序包

2017-04-03T12:21:12.8146350Z C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5):错误:无法加载源的服务索引。[C:\a\1\s\path\to\my\csproj]

2017-04-03T12:21:12.8146350Z C:\Program Files\dotnet\sdk\1.0.0\NuGet.targets(97,5):错误:响应状态代码不表示成功:401(未经授权)。[C:\a\1\s\path\to\my\csproj]

2017-04-03T12:21:12.8176375Z###[错误]Dotnet命令失败,退出代码为非零:1

我的解决方案目录中的
nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="VSTS Tools Feed" value="https://myvstsaccount.pkgs.visualstudio.com/_packaging/Toolsfeed/nuget/v3/index.json" />
  </packageSources>
  <apikeys>
    <add key="https://myvstsaccount.pkgs.visualstudio.com/_packaging/Toolsfeed/nuget/v3/index.json" value="<A PAT generated from an account with access to the feed>" />
  </apikeys>
</configuration>

任务的日志显示使用了配置

从VS或使用nuget 4.0的nuget cli,本地包还原可以正常工作


我应该使用什么任务来还原msbuild 15项目的包,以及如何配置身份验证?

还原定义为
csproj
项目定义中的
PackageReference
元素的nuget包需要nuget 4.0,而托管的生成代理程序中不包括它

您可以通过在源代码管理树中包含nuget 4.0二进制文件,并将该二进制文件作为自定义nuget版本引用到包还原任务中来绕过此限制

例如,当在源代码树的根目录中名为
numget4.0.exe
的文件中包含nuget 4.0二进制文件时,可以将路径指定为
$(Build.SourcesDirectory)/numget4.0.exe


还有一个相关问题供您参考。

根据第二个日志,您是否使用了nuget 3.5?请尝试使用nuget 4.0并在nuget安装程序任务中指定路径。@Marina MSFT是否已在vs 2017托管的生成代理上提供nuget 4.0?如果是,在什么路径?如果没有,推荐的方法是什么?只是从powershell脚本中获取二进制文件?不,不是。我在我的回答中列出了详细信息。如下所述,4.0.0现在作为一个选项可用,因此您不必使用自定义路径。