PlatformNotSupportedException выдает при использовании Dapper с WP - PullRequest
0 голосов
/ 14 января 2019

Выполнение приложения UWP в DEBUG работает отлично.

Использование точно такого же кода, скомпилированного в RELEASE, приводит к сбою с этим сообщением об ошибке

System.PlatformNotSupportedException: 
    'Dynamic code generation is not supported on this platform.'

при выполнении этого кода (используется Dapper 1.5.1 и System.Data.SQLite 1.0.109.2)

using (var c = NewConnection())
{
    var sql = @"
        update settings
        set
            ""value"" = @SetDate
        where ""key"" = 'week_date'";
    c.Execute(sql, new { SetDate = date }); //<= throws PlatformNotSupportedException 
                                            // only on RELEASE not in DEBUG
}

Приложение настроено UWP, как показано ниже. Кроме того, код ошибки: .NET Standard 2.0 Class Library

enter image description here

Почему происходит сбой только на RELEASE и как это исправить?

1 Ответ

0 голосов
/ 14 января 2019

Dapper очень глубоко основан на генерации IL во время выполнения, поэтому изменить его было бы невозможно. Генерация IL времени выполнения принципиально не совместима с UWP.

Нет простого способа сделать эту работу.

Итак: чтобы сделать это, вам нужно будет использовать что-то похожее на пипетку, но не дампер, с одной из двух альтернативных реализаций:

  • отражение связывание на основе (относительно медленное, в зависимости от того, какой доступ к данным вы делаете)
  • код времени генерации кода недостающих частей, предположительно с использованием некоторого анализа розлина и частичной генерации класса

Возможно, прямо сейчас, более прагматичный подход был бы: не используйте dapper в этом случае.

...