从构建服务器中的错误位置复制 Newtonsoft.Json.dll
Posted
技术标签:
【中文标题】从构建服务器中的错误位置复制 Newtonsoft.Json.dll【英文标题】:Newtonsoft.Json.dll being copied from wrong location in the build server 【发布时间】:2015-10-16 15:06:30 【问题描述】:我在这里遇到了一些奇怪的问题,有一个在 Visual Studio 中正常构建的软件,所有引用都使用 NuGet 添加,Newtonsoft.Json.dll 位于包文件夹中,并且引用指向该文件夹。
在构建服务器中构建时,我们注意到测试失败,进一步我们发现实际上复制的 Newtonsoft.Json.dll 是错误的,来自 Blend 文件夹。
来自构建日志:
从“D:\APPS\Microsoft Visual Studio”复制文件 12.0\Blend\Newtonsoft.Json.dll”到“D:\TB\2\PLWRO-WebPP\WebPP-Main-Dev-CI\bin\Newtonsoft.Json.dll”。
为了解决这个问题,我从 blend 文件夹中将 Newtonsoft.Json.dll 重命名为另一件事,然后构建按预期正常工作。
我的问题是,为什么?!?!?似乎构建是在 Blend 文件夹中而不是在提示路径中的设置位置中寻找参考 - 见下文。
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
【问题讨论】:
【参考方案1】:您可以尝试在 HintPath 元素之后添加 <private>true</private>
元素。这应该强制复制到本地目录。
有趣的另一部分是,您正在寻找旧版本 (v4.5.0.0),同时在您的包中引用新版本 (7.0.1)。
在 Visual Studio 中,您可以尝试要求 Nuget 更新此库对 7.x 的引用,然后查看这是否有助于 MSBuild 从更具体的位置提取库。
【讨论】:
实际上 v4.5.0.0 指的是正确的包,如果您尝试添加包,您也会在“包含”中看到该版本。为什么“私人”作为“真实”应该有效?为什么这应该只对这个包有所不同?以上是关于从构建服务器中的错误位置复制 Newtonsoft.Json.dll的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象? [复制]
如何使用 Newtonsoft.JSON 解析 JSON 响应? [复制]