无法解析此引用:CI 服务器上的 NuGet

Could not resolve this reference: NuGet on CI server

我 运行 CI 在 TFS 构建控制器上构建,连接到 VS Online。我有一个 NuGet 包的 'Could not resolve this reference' 问题,我观察到我以前从未见过的行为:

本地包下载到 packages\FluentValidation.5.5.0,而在服务器上,它下载到 packages\FluentValidation.5.5.0.0

Packages.config:

<package id="FluentValidation" version="5.5.0" targetFramework="net45" userInstalled="true" />

.csproj 文件 $(SolutionDir) 用于共享项目 - 适用于所有其他项目:

<Reference Include="FluentValidation, Version=5.5.0.0, Culture=neutral, processorArchitecture=MSIL">     
<HintPath>$(SolutionDir)\packages\FluentValidation.5.5.0\lib\Net40\FluentValidation.dll</HintPath>
  <SpecificVersion>False</SpecificVersion>
  <Private>True</Private>
</Reference>

Nuget 包恢复已启用,因此如果我在本地从包文件夹中删除包并重建 - 工作正常。

现在在 CI 服务器上。构建诊断日志状态:

Installing 'FluentValidation 5.5.0.0'. ... Successfully installed 'FluentValidation 5.5.0.0'.

但是在构建日志中更进一步:

16>C:\Program Files (x86)\MSBuild.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(1697,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "FluentValidation". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\Builds353... stuff...\projectfile.csproj] For SearchPath "{HintPathFromItem}". Considered "C:\Builds353... stuff ...\packages\FluentValidation.5.5.0\lib\Net40\FluentValidation.dll",

不出所料 - 该文件夹中没有包

C:\Builds353\... stuff ...\packages\FluentValidation.5.5.0\lib\Net40\.

但是 - 那是因为它被下载到 CI 服务器上的不同文件夹中:

C:\Builds353\... stuff ...\packages\FluentValidation.5.5.0.0\lib\Net40\.

(注意包文件夹名称后面的额外.0)。

我不知道那个额外的 .0 是从哪里来的。此外,该项目似乎忽略了构建路径。 CI 服务器上装有 VS 2013,我更新了盒子上的 NuGet,但没有帮助。参考文献中只有 1 个地方有 5.5.0.0(有 2 个零)。我删除了尾随的 .0。解决方案仍会在本地构建,但不会在 CI 上构建。

更新 在 .csproj 文件中添加第二个提示路径似乎修复了 CI 服务器上的构建,但在本地破坏了它。我真的无法理解为什么它在本地是 v5.0.0 而在 CI 服务器上是 v5.0.0.0。

P.S. 我已将其报告为错误:https://github.com/NuGet/Home/issues/504

事实证明这是 NuGet 中的一个错误,已在 VS2015 RC 中修复:

来源:https://github.com/NuGet/Home/issues/504