【问题标题】:The type 'JsonConvert' exists in both 'Newtonsoft.Json'Newtonsoft.Json' 中都存在'JsonConvert' 类型
【发布时间】:2020-07-25 20:14:21
【问题描述】:

我正在做一个项目,我需要 Microsoft azure SDK 和 Autodesk NuGet 包.json'。 当我检查引用对象浏览器时,我得到了 2 个版本的 Newtonsoft,其中一个 6.0 指的是 Microsoft azure sdk。

我试图从 .csproj 中删除旧版本,但没有找到。

这是下面的对象浏览器屏幕

我得到的错误是

“JsonConvert”类型存在于“Newtonsoft.Json”中, 版本=6.0.0.0,文化=中性,PublicKeyToken=30ad4fe6b2a6aeed' 和 'Newtonsoft.Json,版本=11.0.0.0,文化=中性, PublicKeyToken=30ad4fe6b2a6aeed'

任何解决它的建议,我确实尝试检查这两个包的依赖关系,但一个确实需要大于 10 的 Newtonsoft 版本,而其他仍然只引用 6.0

编辑: 得到了解决方案,所以在这里添加我提到的内容

【问题讨论】:

  • hm.. 你在使用 nuget / nuget 包吗?
  • 这通常发生在另一个库做了一些令人讨厌的事情时,例如直接导入源作为其构建的一部分,或者使用 IL-merge 在编译后绑定程序集。不幸的是,它是一个完整的 PITA。最好的选择是联系提供令人讨厌的 DLL 的人并告诉他们他们是愚蠢的,并请像其他人一样使用包引用。困难的解决方法是“外部别名”,但这真的很难使用。
  • @sommmen 一个是 nuget,另一个是 SDK
  • @MarcGravell 是的,现在真的很头疼,因为在成功代表演示并获得批准后,在将其集成到主源时,一切都因为冲突而卡住了

标签: c# nuget-package


【解决方案1】:

可以通过为一个(或两个)冲突程序集使用别名来解决这种情况。

这里已经回答了一个类似的问题:Assembly names conflict on external dependencies

你需要做两步:

  1. 为程序集指定别名(通过在对象浏览器中选择属性)
  2. 在您的代码中使用关键字extern alias <alias-name>;

在上述类似问题中给出了一个例子。

这在 Microsoft 的文档中也有解释:extern alias。它引入了一个并行的全局命名空间。

【讨论】:

  • 感谢您提供的信息,这意味着我现在必须深入了解它。如果进一步出现任何问题,我会更新。
  • 这里又提到了这个问题,并解释了解决方案:two different DLL with same namespace
  • 谢谢!我提到了这个extern-alias 错误消失了,现在必须测试它
猜你喜欢
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 2019-03-03
  • 2013-01-20
  • 2022-01-16
  • 2020-01-23
相关资源
最近更新 更多