在MSBuild 15项目中恢复NuGet包

3

我想从私有源(vsts内部源)中还原解决方案中的nuget程序包(由msbuild 15项目组成),并随后构建(和打包)这些项目。

我正在使用需要构建的VS 2017托管代理。

我尝试启用了已弃用的包恢复,使用msbuild进行还原,但是没有还原任何包。以下是日志文件的相关部分:

2017-04-03T12:21:23.5543508Z ##[warning]“还原NuGet程序包”选项已过时。要在您的构建中还原NuGet程序包,请向您的生成定义添加一个NuGet安装程序任务。

2017-04-03T12:21:23.5803410Z ##[command]"C:\LR\MMS\Services\mms\TaskAgentProvisioner\Tools\agents\2.115.0\externals\nuget\NuGet.exe" restore "C:\a\1\s\mysolution.sln" -NonInteractive

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

我尝试使用nuget安装程序任务进行还原。但是失败了:

2017-04-03T12:21:05.3231625Z [command]C:\a_tasks\NuGetInstaller_333b11bd-d341-40d9-afcf-b32d5ce6f23b\0.2.29\node_modules\nuget-task-common\NuGet\3.5.0\NuGet.exe restore -NonInteractive C:\a\1\s\mysolution.sln -Verbosity Detailed -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.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某个依赖项。系统无法找到指定的文件。

需要注意的是,我传递了msbuildversion -15作为附加参数,但似乎nuget尝试加载msbuild 14。

我尝试使用dontnet cli dotnet restore进行还原,但是失败了:

2017-04-03T12:21:08.3424716Z[command]C:\Program Files\dotnet\dotnet.exe restore 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)错误:无法加载源 https://myvstsaccount.pkgs.visualstudio.com/_packaging/Toolsfeed/nuget/v3/index.json. [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 ##[error]Dotnet命令以非零退出代码失败。

我的解决方案目录中的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项目还原包,并如何配置身份验证?


根据第二个日志,你使用了NuGet 3.5吗?请尝试使用NuGet 4.0并在NuGet安装程序任务中指定路径。 - Marina Liu
@Marina-MSFT,VS 2017托管的构建代理上是否已经安装了NuGet 4.0?如果是,它的路径是什么?如果没有,获取它的推荐方法是什么?只需从PowerShell脚本中使用wget下载二进制文件吗? - Martijn
不是这样的。我在我的答案中列出了细节。 - Marina Liu
如下所述,现在已经可用。 - Lex
1个回答

1

csproj项目定义中定义为PackageReference元素的nuget包需要nuget 4.0进行恢复,而托管的构建代理程序中没有包括此版本。

您可以通过将nuget 4.0二进制文件包含在源代码控制树中,并将其作为自定义NuGet版本引用到软件包还原任务中来解决此限制。

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

enter image description here

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


1
请注意,现在可以选择4.0.0版本,因此您不必使用自定义路径。 - Lex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接