【发布时间】:2017-08-16 22:58:49
【问题描述】:
我有一个可以在本地正常运行的 c# 应用程序。它依赖于许多其他 c# 项目。当我右键单击并发布并获取 setup.exe 时,一旦运行,我就会收到一条错误提示
System.IO.FileLoadException:无法加载文件或程序集“Newtonsoft.Json,版本=4.5.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6aeed”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)
文件名:'Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'
这特别来自我的 Twitter 项目。 twitter 项目不引用 4.5.0.0 它引用 6.0.0.0
我似乎在任何地方都找不到对 4.5.0.0 的任何引用。我使用的是 tweetsharp-unofficial 2.3.1.2 (https://github.com/timothy-makarov/tweetsharp),它本身具有 json.net 依赖项,但我没有明确引用。
关于这是如何发生的任何线索?
提前致谢!
【问题讨论】:
-
当不同的项目引用同一个 nuget 包的不同版本时,这种情况经常发生。您的 Twitter 项目引用的项目之一必须使用 4.5.0.0
-
如果所有项目都在同一个解决方案中,您可以打开 nuget 包管理器并转到 Consolidate 选项卡,它会显示不匹配的版本。
-
@GBreen12 我不同意你的说法。 “当不同的项目引用同一个 nuget 包的不同版本时,这种情况经常发生”。这是运行时错误,无论是否使用 nuget,它都可能独立发生。可能你指的是一个案例,当一个项目引用 dll 的 v1 并且还引用第二个项目时,这反过来又引用了同一个 dll 的 v2。在这种情况下,错误会说明 2 个不同的版本。如果项目未连接,最后构建的项目将简单地覆盖 bin 中的 dll,并且在运行时会发生错误,就像这里一样。很大程度上取决于这里的情况。
-
@GBreen12 我的 twitter 项目没有引用任何其他项目,除了一个只是模型,而且该项目中甚至没有 newtonsoft。它确实安装了一个 nuget 包和一个我为该服务制作的类/接口文件。
-
此外,我现在将每个版本都更新为 6.0.0.8 调用 4.5.0.0 的错误没有变化