У меня есть приложение, созданное в Мауи (.NET 7). Теперь я попытался обновиться до .NET 8 и обновил ВСЕ пакеты NuGet. С этого момента я не могу открыть соединение с внутренней базой данных SQLLite.
public const SQLite.SQLiteOpenFlags Flags =
SQLite.SQLiteOpenFlags.ReadWrite |
SQLite.SQLiteOpenFlags.Create |
SQLite.SQLiteOpenFlags.SharedCache;
string sPath = BCDataConstants.DatabasePath;
// value = /data/user/0/it.gattoneroph.photoapp/files/CAPhoto.db
// cames from => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "CAPhoto.db");
Database = new SQLiteAsyncConnection(sPath, Flags);
// no error but "System.TypeInitializationException: The type initializer for 'SQLite.SQLiteConnection' threw an exception." in ALL properties
CreateTableResult s= Database.CreateTableAsync<Tab_TabellaDatabase>().Result;
// here crashes
VS 2022 на Win 11 + API эмулятора 30
.NET 8
NuGet-пакеты
Что я могу сделать?
Перепробовал все, что знаю.
(РЕДАКТИРОВАТЬ)
Свойства соединения после конструктора
Stacktrace, когда я пытаюсь создать таблицу
11:07:55:509 [DOTNET] System.AggregateException: произошла одна или несколько ошибок. (Инициализатор типа для SQLite.SQLiteConnection выбросил исключение.) 11:07:55:509 [DOTNET] ---> System.TypeInitializationException: инициализатор типа для SQLite.SQLiteConnection выдал исключение. 11:07:55:509 [DOTNET] ---> System.TypeLoadException: установка VTable типа SQLitePCL.SQLite3Provider_e_sqlite3 не удалась 11:07:55:509 [DOTNET] в SQLite.SQLiteConnection..cctor() 11:07:55:509 [DOTNET] --- Конец внутренней трассировки стека исключений --- 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionWithLock..ctor(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.Entry..ctor(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.GetConnectionAndTransactionLock(SQLiteConnectionString ConnectionString, Object& TransactionLock) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.GetConnection(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteAsyncConnection.GetConnection() 11:07:55:509 [DOTNET] в SQLite.SQLiteAsyncConnection.<>c__DisplayClass33_0
1[[SQLite.CreateTableResult, SQLite-net, Version=1.9.172.0, Culture=neutral, PublicKeyToken=null]].<WriteAsync>b__0() 11:07:55:509 [DOTNET] at System.Threading.Tasks.Task1[[SQLite.CreateTableResult, SQLite-net, Версия=1.9.172.0, Культура=нейтральная, PublicKeyToken=null]].InnerInvoke() 11:07:55:509 [DOTNET] в System.Threading.Tasks.Task.<>c.<.cctor>b__281_0(Object obj) 11:07:55:509 [DOTNET] в System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop (Thread threadPoolThread, ExecutionContext ExecutionContext, ContextCallback> обратный вызов, состояние объекта) 11:07:55:509 [DOTNET] --- Конец трассировки стека из предыдущего местоположения --- 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionWithLock..ctor(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.Entry..ctor(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.GetConnectionAndTransactionLock(SQLiteConnectionString> ConnectionString, Object& TransactionLock) 11:07:55:509 [DOTNET] в SQLite.SQLiteConnectionPool.GetConnection(SQLiteConnectionString строка подключения) 11:07:55:509 [DOTNET] в SQLite.SQLiteAsyncConnection.GetConnection() 11:07:55:509 [DOTNET] в SQLite.SQLiteAsyncConnection.get_Tracer() 11:07:55:509 [DOTNET] --- Конец внутренней трассировки стека исключений --- 11:07:55:509 [DOTNET] в System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 11:07:55:509 [DOTNET] в System.Threading.Tasks.Task1[[SQLite.CreateTableResult, SQLite-net, Version=1.9.172.0, Culture=neutral, PublicKeyToken=null]].GetResultCore(Boolean waitCompletionNotification) 11:07:55:509 [DOTNET] at System.Threading.Tasks.Task1[[SQLite.CreateTableResult, SQLite-net, Версия = 1.9.172.0, Культура = нейтральная, PublicKeyToken = null]].get_Result() 11:07:55:509 [DOTNET] в PhotoApp.Classes.Database.BCDataConnection..ctor() в C:\Progetti
Database.CreateTableAsync<Tab_TabellaDatabase>().Result - подозрительно, но, возможно, проблема не в этом... System.TypeInitializationException - можете выложить трассировку стека? Как объявлен тип Database?
@Fildor готово (отредактированное сообщение).. да, извините (.net 8.0)
На всякий случай: вы 1. Выполнили чистую сборку проекта/решения 2. Закрыли IDE 3. Вручную удалили (правильную) папку /bin 4. Снова открыли IDE 5. Построили решение?
Да... это одно из первых, что я попробовал :(
VTable setup of Type ??? failed. может быть вызвано обновлением одного из ваших проектов до более новой версии библиотеки и невыполнением этого для всех ваших проектов. Пожалуйста, проверьте ссылку на установленные пакеты nuget, если они имеют одинаковую версию. Пожалуйста, создайте новый эмулятор и запустите приложение, оно работает?





Нашел решение... Я удалил ВСЕ пакеты NuGet sqllite и установил ТОЛЬКО 2
также изменено имя базы данных «CAPhoto.db» на «CAPhoto.db3» и путь dbpath на FileSystem.AppDataDirectory.
Теперь таблицы будут успешно созданы
«Пытался обновиться до C# 8.0» — вы имеете в виду «.Net 8 », не так ли? Не совсем C# 8.0 ...