【问题标题】:Restore nuget packages in msbuild 15 project在 msbuild 15 项目中恢复 nuget 包
【发布时间】:2017-04-03 12:38:51
【问题描述】:

我想在由 msbuild 15 项目组成的解决方案中从私有源(vsts 内部源)恢复 nuget 包,然后构建(并打包)这些项目。

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

我尝试在启用(已弃用的)包恢复的情况下使用 msbuild 进行恢复。这导致没有包被恢复。日志的相关部分:

2017-04-03T12:21:23.5543508Z ##[警告]“还原 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"恢复" C:\a\1\s\mysolution.sln" -NonInteractive

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 -NonInteractive C:\a\1\s\mysolution.sln -Verbosity 详细 -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 [命令]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):错误:无法加载源 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 命令失败,退出代码非零: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 项目的包,以及如何配置身份验证?

【问题讨论】:

  • 根据第二个日志,你用的是nuget 3.5吗?请尝试使用 nuget 4.0 并在 NuGet Installer 任务中指定路径。
  • @Marina-MSFT nuget 4.0 是否已经存在于 vs 2017 托管构建代理中?如果是这样,在什么路径上?如果没有,推荐的获取方式是什么?只需从 powershell 脚本中获取二进制文件?
  • 不,不是。我在回答中列出了详细信息。
  • 如下所述,它现在可用

标签: nuget azure-pipelines


【解决方案1】:

csproj 项目定义中恢复定义为 PackageReference 元素的 nuget 包需要 nuget 4.0,它不包含在托管构建代理中。

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

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

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

【讨论】:

  • 请注意,4.0.0 现在可以作为一个选项使用,因此您不必使用自定义路径。
猜你喜欢
  • 2017-11-26
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2018-08-23
  • 2021-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多