【发布时间】:2015-07-08 12:22:18
【问题描述】:
我在连接到 VS Online 的 TFS 构建控制器上运行 CI 构建。我遇到了 NuGet 包的“无法解决此引用”问题,并且我观察到了以前从未见过的行为:
本地包被下载到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 服务器上。构建诊断日志状态:
正在安装“FluentValidation 5.5.0.0”。 ... 成功安装“FluentValidation 5.5.0.0”。
然后在构建日志中进一步:
16>C:\Program 文件 (x86)\MSBuild\12.0\bin\amd64\Microsoft.Common.CurrentVersion.targets(1697,5): 警告 MSB3245:无法解析此引用。找不到 程序集“FluentValidation”。检查以确保组装 存在于磁盘上。如果您的代码需要此参考,您可以 得到编译错误。 [C:\Builds\24353... 东西...\projectfile.csproj] 对于搜索路径“{HintPathFromItem}”。 考虑“C:\Builds\24353...东西...\packages\FluentValidation.5.5.0\lib\Net40\FluentValidation.dll”,
正如所料 - 该文件夹中没有包
C:\Builds\24353\... stuff ...\packages\FluentValidation.5.5.0\lib\Net40\.
但是 - 这是因为它被下载到 CI 服务器上的不同文件夹中:
C:\Builds\24353\... 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
【问题讨论】:
标签: .net tfs nuget tfsbuild nuget-package-restore