TFS构建代理在Nuget还原时失败:.Net Core + VS 2017 + 私有TFS Feed

6
我有一个.NET Core应用程序,在VS 2017中进行了修改,并使用TFS Feed。在VS 2015中,NuGet restore一直运行良好。但是现在使用VS 2017时,NuGet restore不起作用,返回“Failed to load msbuild Toolset”和“Could not load file or assembly 'Microsoft.Build, Version=14.0.0.0”的错误信息。
我尝试使用dotnet restore,但是我得到了“401(未经授权)”的响应。
显然,NuGet restore是首选的方法,因为它会自动为我们进行身份验证,以便使用TFS Feed,但它似乎无法识别VS 2017。
更新于3/20/2017:
抱歉造成困惑,我忘记提及问题出在使用CI/CD Visual Studio Team Services / Build上。在我的个人电脑上,它可以正常工作,因为我安装了NuGet 4(它随VS 2017一起安装)...但在线上可用的NuGet版本(带有对私有Feed的访问权限)是3.3和3.5。
更新于3/25/2017:
根据@Cece-MSFT的建议,我将NuGet 4.0添加到构建中,但仍然出现错误,但没有太多详细信息。请参见屏幕截图:enter image description here

你使用的 TFS 版本是哪个?你使用的 Nuget 版本是哪个? - Cece Dong - MSFT
你使用Hosted Agent吗?尝试将Nuget.config(可以是本地的nugget.config)添加到版本控制并映射到构建代理,然后指定nugget.config文件(Nuget安装步骤/任务的Nuget.config路径)。另外,尝试将system.debug设置为true(变量选项卡),并检查是否有详细的错误消息。 - starian chen-MSFT
7个回答

1

最后,有一些升级可以选择,如下两种方式来解决这个问题:

  1. 不使用NuGet v3.3和v3.5,而是支持NuGet v4.0

enter image description here

2. 我最喜欢的方法是使用 NuGet Restore 版本 v1.*,现在我可以选择自己的 VSTS Feed... 所以我不再需要 NuGet.config 文件。

enter image description here


1
您可以使用位于构建服务器的%APPDATA%\NuGet\NuGet.Config中的nuget全局配置文件。

0

我已经尝试过使用TFS 2017 + VS 2017 + Nuget 4.0.0.2323,将TFS feed添加到VS的Package Source中后,VS可以成功还原它。

您可以将您的环境与我的进行比较,特别是Nuget版本,因为有人之前在旧版本的Nuget上遇到了类似的问题,请参考:https://github.com/NuGet/Home/issues/3975

=========================================================================

添加截图:

enter image description here


非常奇怪,我得到了:生成 ENOENT 错误。 - Jaider
@Jaider 你说的 Spawn ENOENT 错误是什么意思?请提供详细的错误信息。 - starian chen-MSFT
@Cece-MSFT 有没有办法通过 TFS 下载 4.0 版本?我不想把它放在源代码控制中。而且即使 VS 2017 使用它,它似乎也不可用。我尝试添加它作为需求,但还没有找到 nuget.exe 4.0 的位置。 - trevorc
@Cece-MSFT,另外,我也遇到了@@Jaider报告的相同错误。它检测到正确的版本,然后:Error: utilities/nuget.exe failed. spawn utilities/nuget.exe ENOENT - trevorc

0

我尝试了@Cece-MSFT给出的几个建议,但是无法避免错误。以下是对我有效的方法。我不得不将nuget.exe 4.0.*版本检入版本控制中。我添加了一个命令行工具并执行了我检入的nuget.exe,一切都完美地运行。

注意:这也适用于混合使用.net core和asp.net框架类库。这是在github上报告的问题

注意2:我在我的解决方案中为所有.net core项目使用.csproj版本(VS 2017,没有project.json)。

这是我的nuget恢复构建步骤的屏幕截图。希望能帮助到有所需求的人。

enter image description here


我面临的问题是我正在尝试访问我的私有存储库(TFS Feed Package),这需要添加Nuget.config和权限,而且比较复杂。 - Jaider

0

我已经通过确保在构建中使用以下设置来修复了这个问题:

  • 代理托管,但不是托管VS2017
  • Nuget还原任务为v3.5
  • 构建任务指定VS2017

不知道为什么需要这个特定的组合哈哈!

刚刚意识到您正在构建一个CORE应用程序,很抱歉。对于此操作,还原是可以的,但是构建失败会扩展包。我想我们离成功又近了一步!


0

我通过删除NuGet还原步骤并在MSBuild参数中添加/t:restore来解决了这个问题。这样做就不需要手动升级NuGet。


我尝试过了,但是再次出现了问题,msbuild 没有权限使用私有的 TFS Feed。 - Jaider

0

我遇到了不同的问题,在 VSTS/Azure DevOps 中使用 "Use Nuget" 后再使用 "NuGet restore",在托管代理上还是会抛出此错误。

我必须做出改变...

Path to solution, packages.config, or project.json: **/*.sln

转换为这个...

Path to solution, packages.config, or project.json: **\{YOUR_SOLUTION_NAME}.sln

错误已经消失了。

希望这可以帮到你!


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