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

时间:2018-09-29 18:35:21

标签: c# unity3d

这个问题是针对Unity的,以前曾问过这个问题,但不是针对Unity的。

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

我遇到以下错误:

导入的类型let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [ NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue ] Newtonsoft.Json.JsonSerializerSettings'已定义多次

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

让软件包创建者对此做些什么,我有什么能解决的吗?

1 个答案:

答案 0 :(得分:2)

您可以使用外部别名来绕过冲突。这是这样做的方法。

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

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

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

有关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配合使用是必需的):{{3 }}

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