CsvHelper под Xamarin.Android выдает MissingMethodException

Решение под Xamarin, конечные модули на UWP и Android. Задача: спарсить csv и использовать данные. Для парсинга была просьба использовать библиотеку CsvHelper. Реализовал по докам: настроил маппинг, конвертацию, где требовалось: запускаю в UWP — всё отлично работает, данные корректно спарсились, корректно замаппились. Казалось бы, сказка!

Однако при попытке запустить аналогичный код под Android отхватил сначала:

System.MissingMethodException: 'Constructor 'CsvHelper.Configuration.MemberMap`2[[SampleBrowser.SfChat.DataModelWrapper, SampleBrowser.SfChat, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.String, mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Reflection.RuntimePropertyInfo)' was not found.'

А когда переделал всё с нормального маппинга на атрибуты и ручной "ремап" из строк в нужные типы, то:

System.MissingMethodException: 'Constructor 'CsvHelper.Configuration.DefaultClassMap`1[[SampleBrowser.SfChat.DataModelWrapper, SampleBrowser.SfChat, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]()' was not found.'

Кто-нибудь общался с CsvHelper? Сталкивался? А с Xamarin? Подозреваю, что у меня ещё и что-то с самим проектом случилось, т.к. первоначально в отладчике андроида удавалось дойти до строки

csv.Context.RegisterClassMap<DataModelWrapperMap>();

А теперь внутрь я вообще не проваливаюсь: падаю на создании инстанса приложения. Причём отладка UWP работает исправно (в разных IDE правда запускаю UWP и Андроид). Удалял выходные каталоги, клин, ребилд и т.п.: бестолку, перестал дебажить, сразу валится с одной из вышеописанных ошибок, в зависимости от версии запускаемого кода (с маппингом или без).

P.S. Вся движуха происходит в конструкторе — может в этом и проблема? Попробую всё это дело разлепить, вдруг починится...


Ответы (1 шт):

Автор решения: Ivan Andreev

Нагуглил похожую проблему в юнити, но там открестились тем, что это юнити виноват и предложили использовать ручной вариант парсинга и заглушить инстанциирование маппера таким образом:

ObjectResolver.Current = new ObjectResolver(type => true, (type, args) => null);

Документация по ручному чтению: https://joshclose.github.io/CsvHelper/examples/reading/reading-by-hand/

Для меня это сработало. Хотя первоначальный вариант был сильно красИвее =)

→ Ссылка