Visual Studio Team Services 构建失败,因为 CoreCompile 未引用 NuGet 程序集

Visual Studio Team Services build fails because CoreCompile does not reference NuGet assembly

我 运行 遇到了一个奇怪的问题,我的构建在本地机器上完美运行,但几乎总是在 Visual Studio Team Services 构建代理上失败。我说几乎总是相同的代码有时在 VSTS 构建代理上构建得很好。

错误是对于我的解决方案中的一个项目,编译器找不到 System.Web.Http.dll,它在 Microsoft.AspNet.WebApi.Core NuGet 包中被引用。我已经检查了参考资料,它就在那里。我删除了 NuGet 并重新添加它以修复任何潜在的 NuGet 问题。

准确的错误是:

Error CS0234: The type or namespace name 'Http' does not exist in the namespace 'System.Web' (are you missing an assembly reference?)

引用在 csproj 文件中:

<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\..\Microsoft.AspNet.Cors.5.2.3\lib\net45\System.Web.Cors.dll</HintPath>
</Reference>

VSTS 的 NuGet 恢复任务提示所有 NuGet 包都已安装,但构建仍然失败。

然后我从 Visual Studio Team Services 构建代理中对成功构建和失败构建的命令行进行了比较,发现失败的构建 CoreCompile 任务缺少一些程序集引用。

CoreCompile 从 ResolveAssemblyReferences 获取要引用的程序集。但是 ResolveAssemblyReferences 声称找不到 System.Web.Http.dll.

For SearchPath "{HintPathFromItem}". Considered "....\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll", but it didn't exist.

从 VSO 还原 NuGet 是否存在任何已知问题?我们正在使用 NuGet 4.0。

更新:

Visual Studio 团队服务支持又回来找我了。我有自己的 nuget.config,其中有以下两行。这会干扰构建代理上的全局 NuGet 缓存。一旦我删除了这两行,一切都如预期的那样顺利。

<add key="globalPackagesFolder" value="..\nupkgs" />
<add key="PackageSaveMode" value="nuspec" />

看起来,在某些时候,这个引用是手动添加的,并且相对路径在您的本地 PC 上匹配。

在我见过的每一个有效的 nuget 引用中,这些相对路径都以 "packages" 为前缀。尝试删除 nuget 包,并删除此引用,然后重新安装。

这是我 运行 遇到的问题的答案。

Visual Studio 团队服务支持又回来找我了。我有自己的 nuget.config,其中有以下两行。这会干扰构建代理上的全局 NuGet 缓存。一旦我删除了这两行,一切都如预期的那样顺利。

<add key="globalPackagesFolder" value="..\nupkgs" />
<add key="PackageSaveMode" value="nuspec" />