.Net Core实践2 sqlite
目标
使用.netcore项目在Linux上运行sqlite
环境
.netcore2.1 / centos7 / win10 / vs2017 / sqlite3
sqlite库还是这个System.Data.SQLite.dll ,是.net core版本的.
下载地址http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
sqlite数据库文件是使用sqlitestudio工具在win10上建立.然后复制到centos
问题
一.使用sqlite官方提供的.net standard库
使用Nuget包管理器下载下面版本后,运行失败,找不到sqlite库的路径
研究后发现.netcore项目将nuget下载的包统一放在了c:/user/用户名/.nuget/packages 这个目录下.
项目生成目录下的 .runtimeconfig.dev.json 文件记录了上面那个路径 .deps.json文件记录了相关的包依赖关系.仔细查看路径后,发现并没有错误.但是程序就是找不到包.
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.SQLite, Version=1.0.109.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139'. The system cannot find the file specified.
无奈之下,使用了的添加引用的传统方法.将System.Data.SQLite.dll添加引用到项目中
结果不报错了,但是执行SQL时失败了.日志显示找不到依赖包
Unable to load shared library 'SQLite.Interop.dll' or one of its dependencies.
这个dll分不同的系统平台和.net适用版本,在nuget下载的包中可以找到对应的版本
尝试将win64版本的.net standard2.0的该dll复制到win10系统的该项目运行目录下.结果运行成功了.
然后换到centos上执行
将项目运行目录下的文件复制到centos下,SQLite.Interop.dll这个要用linux64版本.结果运行成功.
二.使用微软的sqlite库
下载nuget包
使用这个包没有遇到任何问题.sqlite数据库读取成功了.
但问题来了.为什么微软自家开发的sqlite要比sqlite官方为.net开发的库要少一些坑呢?