Я не могу разместить весь код, а только основные части.
У нас есть абстрактные действия, и список действий хранится в таблице Azure. Чтобы десериализовать их в классы, мы также сохраняем информацию о типе в таблице в виде строки.
Итак, мы получаем такой тип:
Код: Выделить всё
var myAction = new MyAction();
....
var actionType = myAction.GetType();
var actionTypeForTable = actionType.FullName!;
После этого, когда данные считываются из таблицы, мы используем эту информацию для создания пример действия:
Код: Выделить всё
var type = Type.GetType(actionTypeForTable);
var action = (MyActionBaseType)Activator.CreateInstance(type)!;
Но когда приложение-функция развертывается в Azure, оно не может получить тип на основе строки actionTypeForTable. Строка не пуста, есть правильное значение, но результирующий тип имеет значение NULL, поэтому (MyActionBaseType)Activator.CreateInstance(type)!; завершается с ошибкой с исключением нулевого аргумента.
Странно то, что этот код некоторое время назад работал, но теперь начал давать сбой. Мне кажется, что это произошло после переключения движка среды выполнения с dotnet на изолированный от dotnet, но я не уверен.
Классы приложения-функции и действий — это, по сути, разные сборки. Таким образом, приложение-функция ссылается на сборку с классами действий, но в основном во время компиляции оно использует только абстракцию. Может ли быть проблема в том, что приложение-функция по какой-то причине не может загрузить тип на основе имени типа, но только в облаке Azure?
Подробнее здесь: https://stackoverflow.com/questions/784 ... type-issue
Мобильная версия