Импортированный тип `Newtonsoft.Json.Linq.JObject 'определяется несколько раз - PullRequest
0 голосов
/ 29 сентября 2018

Этот вопрос относится только к Unity, этот вопрос уже задавался ранее, но не специально для Unity.

У меня есть 2 сторонних пакета, в которых есть 2 dll в соответствующих каталогах плагинов: fastjson.dll и newtonsoft.json.dll

Я получаю следующие ошибки:

Импортированный тип Newtonsoft.Json.Linq.JObject' is defined multiple times The imported type Newtonsoft.Json.JsonSerializerSettings 'определяется несколько раз

Причина очевидна, эти2 класса определены в обеих библиотеках.Я попытался удалить одну из библиотек DLL, чтобы устранить проблему, но, поскольку в каталогах подключаемых модулей пакета есть другие библиотеки DLL, которые зависят от обеих библиотек, поэтому при запуске сцены я получаю исключение "файл не найден".

Если не дать разработчикам пакетов что-то с этим сделать, могу ли я что-нибудь исправить?

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете обойти конфликт, используя внешний псевдоним.Вот как это сделать.

Создайте файл 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.

Вот несколько рекомендаций по созданию DLL для Unity (не забудьте скомпилировать с параметром -sdk: 2.0, он не указан в этом документе, новаша dll должна работать с Unity): https://docs.unity3d.com/Manual/UsingDLL.html

Кстати, отправьте запрос сопровождающему плагина, чтобы предупредить их о столкновении пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...