LINUX.ORG.RU

An exception was thrown by the type initializer for ...

 ,


0

2

Класс - абстрактный, с несколькими статичными методами. При запуске в mono выдаёт сабжевую ошибку при инициализации модели типов сериализатора protobuf:

var model = TypeModel.Create();
model.Add(typeof(AbstractCommand), true);
В майкрософтовской CLR всё нормально. Пробовал добавлять пустой конструктор, но это ничего не изменило. В гугле даже упоминания в точности такого сообщения об ошибке не нашёл. Пробовал обрамлять код try-блоком с выводом innerException, но сообщение об ошибке это не меняло. Может, кто-то сталкивался с похожим?

★★★★

В гугле даже упоминания в точности такого сообщения об ошибке не нашёл

и не найдешь, потому что ты сюда его не запостил. Еще неплохо было бы testcase сделать, из приведенного кода понятно ровно нихрена.

dib2 ★★★★★ ()

model.Add(typeof(AbstractCommand), true);

может он внутри пытается инстанциировать AbstractCommand, который, судя из названия, инстанциировать нельзя?

dib2 ★★★★★ ()
Ответ на: комментарий от dib2

Оказывается, там protected переменная использовала неинициализированную к тому времени глобальную переменную. Хотя странно, что m$ рантайм это схавал

wingear ★★★★ ()
Ответ на: комментарий от wingear

скорее всего это его «недочет». можешь поподробней описать ситуацию (или тесткейс) для разработчиков? из текста постом выше мало что понятно (глобальных переменных не существует в C#.)

dib2 ★★★★★ ()
Ответ на: комментарий от dib2

Это я для простоты. Там был неинициализированный контейнер:

protected static readonly ILogger Log = LoggerFactoryContainer.GetLog();
Инициализировался он после вызова typeof, из-за чего всё и валилось. После того, как перенёс инициализацию до, стало нормально:
LoggerFactoryContainer.Current = new TraceSourceLogFactory();
var model = TypeModel.Create();
model.Add(typeof(AbstractCommand), true);
Похоже, в CLR там была ленивая инициализация, а здесь поле создавалось при вызове typeof

wingear ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.