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

时间:2015-04-29 09:43:04

标签: .net tfs nuget tfsbuild nuget-package-restore

我正在连接到VS Online的TFS构建控制器上运行CI构建。对于NuGet包,我有一个'无法解决此引用'的问题,我观察到了之前没有见过的行为:

本地将pacakage下载到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包还原,因此如果我从packages文件夹本地删除包并重建 - 工作正常。

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

  

安装'FluentValidation 5.5.0.0'。   ...   已成功安装'FluentValidation 5.5.0.0'。

然后在构建日志中进一步:

  

16&gt; C:\ Program Files   (86)\的MSBuild \ 12.0 \ BIN \ AMD64 \ Microsoft.Common.CurrentVersion.targets(1697,5):   警告MSB3245:无法解析此引用。找不到   程序集“FluentValidation”。检查以确保装配   存在于磁盘上。如果您的代码需要此引用,您可以   得到编译错误。 [C:\ Builds \ 24353 ... stuff ... \ projectfile.csproj]                    对于SearchPath“{HintPathFromItem}”。                    考虑“C:\ Builds \ 24353 ...... stuff ... \ 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,没有帮助。只有一个地方有5.5.0.0(有2个零),在参考中。我删除了尾随.0。解决方案仍在本地构建,但不在CI上构建。

local packages folder left - server right

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

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

1 个答案:

答案 0 :(得分:2)

原来这是NuGet中的一个错误,它在VS2015 RC中被修复:

Bug comment

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