[BUG] При загрузке внешней компоненты не объявляются имена перечислений
Опишите ошибку
При загрузке внешней компоненты нельзя задать в коде значение перечисления, выдается исключение: Неизвестный символ: <ИмяПеречисления>. При этом уже присвоенные значения имеют корректный тип:
ModuleId.ModuleType: ConfigModule
TypeOf(ModuleId.ModuleType): CoverageModuleType
CoverageModuleType.ConfigModule: Неизвестный символ: CoverageModuleType
Окружение
- ОС: Windows 10 21H1 x64
- CLR: 4.0.30319.0
- Версия: 1.6.0.213 x64
А можно пример компоненты и скрипт, которым грузим? Судя по коду - должно подключаться
Да, я тоже посмотрел по коду, что перечисления должны подключаться.
Конечно: компонента https://github.com/yukon39/CoverageBSL
Код bug.os:
AttachAddIn("src\CoverageBSL.AddIn\bin\Debug\net48\CoverageBSL.AddIn.dll");
ConfigModule = CoverageModuleType.ConfigModule;
Исключение:
{Модуль D:\GitHUB\yukon39\CoverageBSL\src\CoverageBSL.os\bug.os / Ошибка в строке: 2,35 / Неизвестный символ: CoverageModuleType}
Или чистый пример: https://t.me/oscript_library/42515
Пример воспроизведения (Из того самого сообщения выше): bug.zip
Пример воспроизведения в свою очередь содержит ошибку: BugEnum.cs
[EnumItem("EnumValue")] // <--- или здесь BugValue
EnumValue
bug.os
BugValue = BugEnum.BugValue; // <--- или здесь EnumValue
По существу issue:
- перечисления из загруженных библиотек действительно подключаются, но не передаются в
MachineInstance(несложно исправить); - такое исправление всё равно не поможет, т.к. обращения к перечислениям вида
ConfigModule = CoverageModuleType.ConfigModule;обрабатываются как ошибочные еще при компиляции, а не после запуска скрипта. Работающий вариант будетConfigModule = eval(CoverageModuleType.ConfigModule);. Перечисления из внешних компонент, загружаемые из библиотек, подключаемых через#Использовать(см. https://github.com/EvilBeaver/OneScript/issues/1147#issuecomment-1000918931) также будут работать. - возможно изменение компилятора, которое позволит использовать подключаемые перечисления напрямую, но тогда ошибки в скрипте при обращении к свойствам объекта, например
Массив = Новый Массив();
К = Масив.Количество;
будут выявляться только в рантайме, а не при компиляции. Это худший вариант.
Отслеживать обращения к функции AttachAddIn - вообще не вариант.