Итак, у меня есть проект в Unity, который должен иметь возможность загружать и создавать экземпляры классов из сборки, экспортированной из другой программы. Это выглядит так:
- Необходимые файлы экспортируются как DLL из проекта Unity.
- Другая программа загружает эту DLL и использует ее для создания нового класса (т. е. вызова методов в исходном приложении Unity), который затем компилируется в другую DLL.
- Исходное приложение Unity загружает эту DLL и запускает только что созданный класс.
Однако, когда я перехожу к шагу 3, аналогичные функции в исходном проекте Unity дублируются, и возникают конфликты. Я думаю, это имеет смысл, потому что когда вы компилируете DLL, она должна разрешать все ссылки.
Затем я попытался сделать это, чтобы исходный проект Unity брал код, сгенерированный другой программой (текст, а не dll), и компилировал его во время выполнения. Это работало в Windows, но проблема в том, что это приложение для Android, и когда я собираю его на телефон, я получаю следующее исключение, используя CSharpCodeProvider для компиляции:
2019/08/29 14:40:45.424 20040 20069 Error Unity DirectoryNotFoundException: Could not find a part of the path "/tmp/a6icqx2c.tmp".
2019/08/29 14:40:45.424 20040 20069 Error Unity at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00164] in <7d97106330684add86d080ecf65bfe69>:0
2019/08/29 14:40:45.424 20040 20069 Error Unity at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean isAsync, System.Boolean anonymous) [0x00000] in <7d97106330684add86d080ecf65bfe69>:0
2019/08/29 14:40:45.424 20040 20069 Error Unity at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access) [0x00000] in <7d97106330684add86d080ecf65bfe69>:0
2019/08/29 14:40:45.424 20040 20069 Error Unity at (wrapper remoting-invoke-with-check) System.IO.FileStream..ctor(string,System.IO.FileMode,System.IO.FileAccess)
2019/08/29 14:40:45.424 20040 20069 Error Unity at System.CodeDom.Compiler.TempFileCollection.EnsureTempNameCreated () [0x00076] in <0079a30f96a047348857e1cecc6c638a>:0
2019/08/29 14:40:45.424 20040 20069 Error Unity at System.Co
К сожалению, остальное обрезано. Я попытался использовать Roslyn и также получил исключение DirectoryNotFoundException. Кто-нибудь знает, как я могу исправить это исключение или создать файл DLL в другом приложении, чтобы он правильно вызывал методы в исходном приложении?