我正在连接到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上构建。
更新 在.csproj文件中添加第二个提示路径似乎修复了CI服务器上的构建,但在本地中断了它。我真的无法理解为什么它本地的v5.0.0和CI服务器上的v5.0.0.0。
P.S。我已将其报告为错误:https://github.com/NuGet/Home/issues/504