在msbuild 15项目

时间:2017-04-03 12:38:51

标签: nuget azure-pipelines

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

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

我已尝试使用msbuild进行恢复,并启用了(已弃用的)程序包还原。这导致没有包被恢复。日志的相关部分:

  

2017-04-03T12:21:23.5543508Z ## [警告]不推荐使用'Restore NuGet Packages'选项。要在构建中恢复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'的msbuild版本'4.0'。

我尝试使用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 \的包恢复到\ my \ csproj ...

     

2017-04-03T12:21:12.8146350ZC:\ Program Files \ dotnet \ sdk \ 1.0.0 \ NuGet.targets(97,5):错误:无法加载源https://myvstsaccount.pkgs.visualstudio.com/_packaging/Toolsfeed/nuget/v3/index.json的服务索引。 [C:\一个\ 1 \ S \路径\到\我\的csproj]

     

2017-04-03T12:21:12.8146350Z C:\ Program Files \ dotnet \ sdk \ 1.0.0 \ NuGet.targets(97,5):错误:响应状态代码未指示成功:401(未授权)。 [C:\一个\ 1 \ S \路径\到\我\的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项目的包,以及如何配置身份验证?

1 个答案:

答案 0 :(得分:1)

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

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

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

enter image description here

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