@bidolah

Портирование на Linux с помощью MonoDevelop. Проблемма с NuGet пакетом System.Data.SQLite... в Mono не находит SQLite.Interop.dll. Что делать?

Есть программа написанная на .Net 4.0 нужно портировать на Linux(ubuntu 14.04). Для портирование использую MonoDevelop. Всьо нормально работает на windows, использую NuGet пакет System.Data.SQLite для работі с БД. Когда добавляю пакет System.Data.SQLite в Mono проект все нормально но как только запускаю программу d81e53dfb9e449f2a68de0f85bb72d4d.png
типа файл SQLite.Interop.dll не найден. Но в самой папке проекта есть папки x64, x86 где лежит файл SQLite.Interop.dll.
Может кто нибудь знает? Не хотелось бы использовать Mono.Data.Sqlite.
Спасибо.
  • Вопрос задан
  • 3236 просмотров
Решения вопроса 1
@tsul
System.Data.SQLite.dll под Linux должен использовать не SQLite.Interop.dll, а libsqlite3.so
Т.е.
  1. либо нужен предустановленный пакет sqlite3 (libsqlite3, sqlite3-dev), чтобы библиотека libsqlite3.so была в системных,
  2. либо компилировать исходники sqlite3 на конкретной системе и класть libsqlite3.so.0 рядом с System.Data.SQLite.dll вместо SQLite.Interop.dll.

В первом случае версия системной библиотеки может быть старее, чем нужна для System.Data.SQLite, могут быть проблемы с новыми фичами. Я делал по второму варианту. Пришлось еще перекомпилировать сам System.Data.SQLite:
SET MSBUILD_ARGS=/property:UseInteropDll=false /property:UseSqliteStandard=true
set NETFX35ONLY=1
call build.bat ReleaseManagedOnly

хотя наверное можно было использовать Mono dllmap.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@mayorovp
Вы не можете использовать нативную виндовую dll под линуксом.
Ответ написан
Neuroware
@Neuroware
Программист в свободное от работы время
придется подключать родную Mono.Data.Sqlite и переделывать код под нее, "перенести" win32 библиотеку так нельзя
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы