导入的类型"Newtonsoft.Json.Linq.JObject"被多次定义



这个问题是特定于Unity的,这个问题之前已经问过,但不是专门针对Unity的。

我有 2 个第三方软件包,它们在各自的插件目录中有 2 个 dll:fastjson.dll 和 newtonsoft.json.dll

我收到以下错误:

导入的类型Newtonsoft.Json.Linq.JObject' is defined multiple times The imported typeNewtonsoft.Json.JsonSerializerSettings'被多次定义

原因很明显,这两个类在两个 dll 中都定义了。 我试图删除其中一个 dll 来解决问题,但由于包的插件目录中还有其他 dll 依赖于这两个 dll,所以当我运行场景时,我得到一个文件找不到异常。

除了让包创建者对此做点什么之外,我能做些什么来修复吗?

您可以使用外部别名绕过冲突。以下是操作方法。

Assets文件夹中创建文件mcs.rsp。写这样的东西:

-reference:Newtonsoft=Assets/Plugins/newtonsoft.json.dll

编辑路径,使其符合项目的体系结构。(如果您愿意.dll可以使用 fastjon(

关于mcs.rsp: https://docs.unity3d.com/Manual/PlatformDependentCompilation.html 的更多信息

然后,在罪魁祸首.cs文件中,添加以下内容:

extern alias Newtonsoft;
using UnityEngine;
using JObject = Newtonsoft::Newtonsoft.Json.Linq.JObject;
// ...

另一种解决方案是反编译(最近的 IDE,如 Rider/MVS 可以为您完成(并重新生成托管 DLL 之一并重命名命名空间。您可能必须使用修改后的 DLL 修改所有脚本。

以下是为 Unity 创建 DLL 的一些指南(不要忘记使用 -sdk:2.0 选项进行编译,本文档中未指定它,但您的 dll 需要它才能使用 Unity(: https://docs.unity3d.com/Manual/UsingDLL.html

顺便说一下,向插件维护者发送请求以警告他们有关命名空间冲突的信息。

最新更新