检查对 Newtonsoft.json DLL 的引用,并确保它没有自动选择解决方案中的包文件夹之外的版本。
我的 VS 2013 不断在各种版本中找到其他副本/program files (x86)/...
文件夹。它甚至忽略了将包版本 DLL 显式添加到项目中的情况。必须更深入地挖掘以找出发生这种情况的原因......
调查
我打开了项目.csproj
在文本编辑模式下打开文件,并搜索对 Newtonsoft.Json 的所有引用。
事实证明,我的 csproj 文件中对 DLL 的引用不是一个,而是两个(我不知道这是可能的)。其中一个引用了较旧的 Newtonsoft.json 5.0.6(当前版本为 5.0.8)。
Solution
我没有手动删除其中一个,而是将这个缺失的元素添加到第二个 DLL 包含中。我还将版本号更改为5.0.8:
<Private>True</Private>
所以现在看起来像:
<Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\..\CsQueryTest\packages\Newtonsoft.Json.5.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
Private
是为 DLL 引用定义“复制本地”的设置。然后它再次开始在输出中包含 DLL!
我将找出从 csproj 文件中删除哪些内容,但现在如果您遇到此问题,这可能会让您继续下去。看起来原因可能是过去的 NUGET 更新。