从构建服务器中的错误位置复制 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 元素之后添加 &lt;private&gt;true&lt;/private&gt; 元素。这应该强制复制到本地目录。

有趣的另一部分是,您正在寻找旧版本 (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 响应? [复制]

使用 nmake 构建 wxWidgets 3.0.0 - 在错误位置创建的目录

在“将文件复制到放置位置”步骤后诊断 TFS 构建挂起

如何在构建有状态小部件之前等待功能? [复制]

无法从字符串转换为 NewtonSoft.Json.JsonReader