这个问题是针对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,因此当我运行场景时,我找不到文件异常。
让软件包创建者对此做些什么,我有什么能解决的吗?
答案 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 }}
顺便说一句,向插件维护者发送请求以警告他们有关名称空间冲突的信息。