问题描述
在ASP.NET Core 3.1应用程序的sqlite中加载mod_spatialite扩展时遇到了一些麻烦。当我运行下面的代码时,出现以下错误:“ sql逻辑错误找不到指定的模块。”
string dbFile = "D:\\Temp\\spatialtest.db";
string connectString = $"Data Source={dbFile};Version=3;";
sqliteConnection connection = new sqliteConnection(connectString);
connection.open();
connection.EnableExtensions(true);
connection.LoadExtension("mod_spatialite");
我引用了NuGet的System.Data.sqlite(https://www.nuget.org/packages/System.Data.SQLite/1.0.113.1)包。我在http://www.gaia-gis.it/gaia-sins/中找到了用于在spacespaceite中加载的软件包。我尝试了当前稳定的4.3.0a和新的5.0.0-RC1中的软件包,包括amd64和x86二进制文件。
奇怪的是,当我将代码复制到.NET Core控制台应用程序或.NET Core类库(CL),然后从控制台应用程序引用CL时,它确实起作用。
我不明白为什么它不能在Console应用程序中工作,而不能在ASP.NET应用程序中工作。我想念什么吗?任何帮助将不胜感激!
编辑:将测试项目添加到Github:https://github.com/RogierB/SQLiteSpatialiteTest
解决方法
可能在控制台应用程序中您正在使用EF?使用EF安装SQLite时,将安装所有必需的库。
尝试添加此库
Install-Package SQLitePCLRaw.bundle_e_sqlite3 -Version 2.0.3
,
我为我的问题找到了可行的解决方案。我创建了一个新文件夹,并将gaia下载(http://www.gaia-gis.it/gaia-sins/)中的所有文件添加到该文件夹中。我要做的下一件事是将新创建的文件夹添加到系统的PATH环境变量中(Win 10)。重新启动Visual Studio,现在它确实启动了,我什至不需要在项目/解决方案中拥有DLL,因为它将从PATH中获取DLL