EntryPointNotFoundException в SQLite после отображения FolderBrowserDialog

При использовании 64-битной программы System.Data.SQLite выдает следующее исключение EntryPointNotFoundException:

Не удалось найти точку входа с именем «sqlite3_changes_interop» в DLL «SQLite.Interop.dll».

Странно, это только происходит, еслиForeign Keys=True указывается в строке подключения и, что более важно, только после отображенияFolderBrowserDialog, Я искал папку для отображения баз данных для загрузки.

Следующий код отображает проблему:

public Form1()
{
    InitializeComponent();

    // Exception below if this is displayed
    using (var diag = new FolderBrowserDialog())
    {
        diag.ShowDialog(this);
    }

    var conn = new SQLiteConnection("data source=':memory:'");
    conn.Open(); // Works fine
    conn.Close();

    // No exception below if displayed here instead
    //using (var diag = new FolderBrowserDialog())
    //{
    //    diag.ShowDialog(this);
    //}

    conn = new SQLiteConnection("data source=':memory:';foreign keys=True");
    conn.Open(); // EntryPointNotFoundException thrown here
    conn.Close();
}

Открытие связи сforeign keys=True работает нормально, если диалоговое окно не отображается или отображается после открытия любого другого соединения SQLite. Код также работает нормально, если программа работает как 32-битный процесс. Поведение также то же самое, если я использую либо сборку SQLite с одинарным смешанным режимом x64, либо сборку взаимодействия MSIL + x64. Я использую v1.0.92.0 такэтот это не проблема.

Так что вопрос в том, почему бы показыватьFolderBrowserDialog влияет на сборку System.Data.SQLite, находящую точку входа в собственной библиотеке взаимодействия, и почему это происходит только в 64-битном процессе?

В качестве обходного пути я могу загрузить базу данных в памяти, прежде чем делать что-либо еще в программе, но мне не нравится это «решение», так как я использую EF6 и хотел бы иметь возможность использовать разных провайдеров, настроенных через файл конфигурации или даже во время выполнения через пользовательский ввод. Следовательно, весь специфичный для sqlite код находится в другой сборке.

Ответы на вопрос(2)

Ваш ответ на вопрос