我正在尝试更新现有的代码库,以便它在Android N上运行。 目前,文件SQLite.cs正在使用DllImports将sqlite3命令链接到本机库libsqlite.so,不再允许这样做并生成错误: 'libmonosgen-2.0.so:未经授权访问“/system/lib/libsqlite.so”'
为了解决这个问题,我使用名为SQLite.Net.Platform.XamarinAndroidN的Nuget Package Manager添加了一个新的引用,其中包含SQLiteApiAndroidN类,它具有我需要的sqlite3方法来替换我的问题文件中的那些。
我的命名空间:
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Reflection;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using SQLite.Net.Interop;
using SQLite.Net.Platform.XamarinAndroid;
实例化课程:
public static class SQLThree
{
public static SQLite.Net.Platform.XamarinAndroid.SQLiteApiAndroidN sqlite = new SQLiteApiAndroidN();
}
用于打开数据库的对象示例:
var r = SQLThree.sqlite.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero);
当我构建此解决方案时,我收到以下错误:
加载程序集时出现异常:System.IO.FileNotFoundException:无法加载程序集'SQLite.Net.Platform.XamarinAndroid,Version = 3.1.0.0,Culture = neutral,PublicKeyToken ='。也许它在Mono for Android配置文件中不存在?
文件名:'SQLite.Net.Platform.XamarinAndroid.dll'
at Java.Interop.Tools.Cecil.DirectoryAssemblyResolver.Resolve(AssemblyNameReference reference,ReaderParameters parameters)
在Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(DirectoryAssemblyResolver解析器,ICollection 1 assemblies, AssemblyDefinition assembly, Boolean topLevel)
at Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(DirectoryAssemblyResolver resolver, ICollection
1个程序集,AssemblyDefinition程序集,Boolean topLevel)
在Xamarin.Android.Tasks.ResolveAssemblies.Execute(DirectoryAssemblyResolver解析器)SIMSMobileView
SQLite.Net.Platform.XamarinAndroidN.dll位于项目的packages文件夹中。该引用将添加到正确的项目文件的引用中。关于我可以做些什么来解决这个错误的想法?我对c#和Xamarin很新,并且通常用Java本地编写Android应用程序,但是我把这个项目交给了更新;如果我忽略了一些微不足道的事情,那就道歉了。
答案 0 :(得分:0)
尝试
删除Packages文件夹的所有内容(通过Nuget引用的所有DLL)
重新启动解决方案
Build(这将导致Nuget再次根据packages.config获取所有DLL)