我是一个TFS构建控制器,连接到VS在线上运行的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包恢复启用,所以如果我在本地从包文件夹中删除包和重建 - 工作正常。
现在,CI服务器上。 建立诊断日志状态:
安装 'FluentValidation 5.5.0.0'。 ...成功安装 'FluentValidation 5.5.0.0'。
但随后进一步生成日志:
16> C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ AMD64 \ Microsoft.Common.CurrentVersion.targets(1697,5):警告MSB3245:无法解析此引用。 无法找到程序集“FluentValidation”。 检查以确保存在磁盘上的装配。 如果您的代码需要此引用,则可能出现编译错误。 [C:\构建\ 24353 ...东西... \ projectfile.csproj对于SearchPath中 “{} HintPathFromItem”。 被认为是 “C:\构建\ 24353个...东西... \包\ 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.0从何而来。 同时该项目似乎忽略了构建路径。 CI服务器上有VS 2013和我在包装盒上更新的NuGet,并没有帮助。 这里只有1的地方,有5.5.0.0(含2个零),这是在参考。 我去掉末尾的.0。 解决方案仍然在当地建立,但不能在CI。
更新添加中的.csproj文件中的第二hintpath似乎解决CI服务器上构建,但是局部打破它。 我真的不能让我周围为什么它是V5.0.0本地和v5.0.0.0 CI服务器上头。
PS我已经报告说,它的缺陷: https://github.com/NuGet/Home/issues/504