我想在由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项目的包,以及如何配置身份验证?
答案 0 :(得分:1)
在PackageReference
项目定义中恢复定义为csproj
元素的nuget包需要nuget 4.0,它不包含在托管构建代理中。
您可以通过在源代码管理树中包含nuget 4.0二进制文件来解决此限制,并将程序包还原任务中的二进制文件称为自定义NuGet版本。
例如,当您将nuget 4.0二进制文件包含在源树根目录中名为nuget4.0.exe
的文件中时,可以将路径指定为$(Build.SourcesDirectory)/nuget4.0.exe
。
并且有一个相关问题here供您参考。