OneScript
OneScript copied to clipboard
После упаковки в EXE-модуль не работают внешние компоненты
Опишите ошибку Понятное описание того, что происходит
используется импорт #Использовать sql
После упаковки в EXE
выводится ошибка конструктор не найден, запуск без упаковки отрабатывает отлично.
Воспроизведение ошибки
#Использовать sql Соединение = Новый Соединение;
Steps to reproduce the behavior:
- Запустить код ...
- Подать на вход параметры ...
- Увидеть ошибку
Ожидаемое поведение Отработает как при запуске без упаковки
Окружение
- ОС: windows
- Версия:1.5.0.187
Дополнительная информация
По-моему, это дубликат #487 и #1014 Требуется человек, который это доработает и починит (или скажет в чем там дело)
Вкратце: упаковка в EXE задумывалась исключительно как упаковка 1 (одного!) файла скрипта. Потом потребовалось упаковывать туда много файлов из библиотек - сделали. Автоматическая упаковка DLL вместе со всеми их зависимостями не поддерживается этим режимом и никогда не поддерживалась. В качестве замены можно посоветовать упаковку dll в макеты, но опять же - надо протестировать насколько это работает.
Спасибо. Осталось понять - "можно посоветовать упаковку dll в макеты", куда и что нужно пихнуть, пересобрать DLL? или библиотеку SQL, которая подключается #Использовать sql? Пример бы как это делается.
Автор библиотеки SQL должен создать "макет" с dll и использовать его не с диска по файловому пути, а через механику макетов. Документации сходу найти не смог, но она точно где-то есть.
В какой-то из либ @Khorevaa используются макеты
Да в gitsync и используется :))) Запаковываю в hex и потом в класс, распаковка во временный файл https://github.com/oscript-library/gitsync/blob/master/tasks/pack.os - тут запаковывается временный файл cfe https://github.com/khorevaa/gitsync-plugins/blob/develop/tasks/pack.os - тут еще и dll из проекта unpack
@khorevaa ну т.е. получается, ты не используешь макеты 1Скрипта, а хранишь в собственном механизме?
Когда писалось.. еще не было макетов
Я создавал #1014. Насколько я помню, перед этим тикетом Никита @nixel2007 написал мне, что нужно dll упаковывать в Макет. Я так делал, насколько я помню, dll распаковывалась в временный каталог, но проблема с конструктором оставалась.
Я создавал #1014. Насколько я помню, перед этим тикетом Никита @nixel2007 написал мне, что нужно dll упаковывать в Макет. Я так делал, насколько я помню, dll распаковывалась в временный каталог, но проблема с конструктором оставалась.
Там ещё замуты с регистрацией этой длл. Насколько я помню, сейчас типы из длл можно подключить только на этапе package-loader. В рантайме уже "поздно". Возможно это поправлено в 2.0, но тут вопрос к @EvilBeaver
Да, в лоадере пакета, там где объявляются классы/модули
У меня, кстати, ошибка была с другой dll - oscript-gui.dll. До сих пор приходится пользоваться oscript версии 1.2, чтобы запускать dll в exe.
@antonyfg это должно быть исправлено в версии 1.6 Попробуйте её
Предлагаю класть все необходимые dll в ту же папку, где лежит ЕХЕ. Рядом создавать файл имяфайлаехе.cfg, в который записывать имена dll, которые необходимо загрузить... Этот файл нужен потому, что тут же в папке могут быть сторонние dll, которые не являются библиотеками ОСкрипта и поэтому их загружать не надо... Я дописал небольшой фрагмент в файл src\StandaloneRunner\ProcessLoader.cs и всё заработало... Прилагаю к этому сообщению файл исходника и пример того, как все выглядит в готовом виде... Cам сделать PR не могу, так что если решение посчитаете правильным и есть желающие внедрить, будет хорошо.. Пример.zip .