Непонятный Exception после попытки открыть базу данных в Xamarin
Приложение получает пакеты данных с файлом sqlite3 через Udp сокет, и записывает его в Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData:
public static void saveResponseToFile(string filename, byte[] response)
{
string filePath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), filename);
FileStream fs = File.Create(filePath);
fs.Write(response, 0, response.Length);
fs.Close();
}
Я проверяю существует ли этот файл с помощью File.Exists(), она выдает true. Дальше, я пытаюсь подключится к базе данных и вернуть словарь нужных мне значений. Вот функция:
Dictionary<string, string> functions = new Dictionary<string, string>();
const string selectNameAndCodeFromFunctionsTable = "SELECT NAME, secret_message FROM functions";
using (var connection = new SqliteConnection($"Data source={path}"))
{
connection.Open();
SqliteCommand command = new SqliteCommand(selectNameAndCodeFromFunctionsTable, connection);
using (SqliteDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
var name = reader.GetValue(0);
var secret_message = reader.GetValue(1);
functions[$"{name}"] = $"{secret_message}"; // name is Object thats why i use ${value}
}
}
}
connection.Close();
}
return functions;
Строчка using (var connection = new SqliteConnection($"Data source={path}")) выдает System.Reflection.TargetInvocationException: 'Exception has been thrown by the target of an invocation.'
Вот детали ошибки: {System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.DllNotFoundException: winsqlite3 assembly: type: member:(null)
at (wrapper managed-to-native) SQLitePCL.SQLite3Provider_winsqlite3+NativeMethods.sqlite3_libversion_number()
at SQLitePCL.SQLite3Provider_winsqlite3.SQLitePCL.ISQLite3Provider.sqlite3_libversion_number () [0x00000] in <6e5232d9ffef469aa0226cf75735d5dc>:0
at SQLitePCL.raw.SetProvider (SQLitePCL.ISQLite3Provider imp) [0x00008] in <034c99e83d644b8ea495ce45509cf104>:0
at SQLitePCL.Batteries_V2.Init () [0x00005] in <42657b7645474aabb7c557ccf3cfec47>:0
at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)
at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:395
--- End of inner exception stack trace ---
at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00081] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/corlib/System.Reflection/RuntimeMethodInfo.cs:409
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/external/corefx/src/Common/src/CoreLib/System/Reflection/MethodBase.cs:53
at Microsoft.Data.Sqlite.SqliteConnection..cctor () [0x0003b] in :0 }
Причиной может быть просто потеря пакетов и как результат неправильная запись файла, но как мне это проверить? Если я попробую сохранить бд во внешнем хранилище приложения, я смогу ее как-то открыть сам и посмотреть что там творится(если запущу с телефона и посмотрю через проводник в хранилище телефона)? Ил