问题:我正在尝试开发一个ASP.NET MVC(.Net Framework 4.7.2)Web应用程序,希望在其中使用Microsoft.Data.Sqlite
版本(5.0.2),但在运行该应用程序时,Web应用程序在以下代码行崩溃(在调试IIS Express时,以及在Windows 10上的本地IIS上的app.publish中):
SqliteConnection dbConn = new SqliteConnection("Data Source=test.db");
抛出的异常如下所示:
System.TypeInitializationException
HResult=0x80131534
Message=The type initializer for 'Microsoft.Data.Sqlite.SqliteConnection' threw an exception.
Source=Microsoft.Data.Sqlite
StackTrace:
at Microsoft.Data.Sqlite.SqliteConnection..ctor(String connectionString)
at sqliteTest.Controllers.ValuesController.Get() in C:\Users\FaqeerHussain\source\repos\sqliteTest\sqliteTest\Controllers\ValuesController.cs:line 16
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass6_2.<GetExecutor>b__2(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)
This exception was originally thrown at this call stack:
[External Code]
Inner Exception 1:
TargetInvocationException: Exception has been thrown by the target of an invocation.
Inner Exception 2:
Exception: Library e_sqlite3 not found
我目前的尝试:以下Inner Exception: Library e_sqlite3 not found
尝试在'bin'文件夹中查找,发现e_sqlite3.dll已存在于bin\runtimes\win-x64\native
与bin\runtimes\win-x86\native
文件夹中,这两个文件夹都包含e_sqlite3.dll。尝试手动将上述x86/x64 e_sqlite3.dll复制到bin
根文件夹,但错误仍然存在。
我应该怎么做才能让Microsoft.Data.Sqlite
在我的ASP.NET MVC(.NET Framework 4.7.2)Web应用程序中正常工作?
7条答案
按热度按时间ghg1uchk1#
这是因为Microsoft.Data.Sqlite的软件包与.Net Framework的版本不兼容。您可以尝试将Microsoft.Data.Sqlite的NuGet版本更改为2.2.0以正常运行。
fkaflof62#
我发现e_sqlite3.dll位于runtimes\win-x86\native\e_sqlite3.dll,所以我创建了这些文件夹,并将e_sqlite3. dll添加到本机文件夹中。之后,它就工作了!
hsvhsicv3#
对于任何其他遇到这个问题的人来说,不幸的是,这是一个尚未修复的known issue。
在我的例子中,我从一个
.NET Framework 4.8
项目中引用了一个使用Sqlite的.NET Standard 2.0
库。我只是简单地将该库更改为也面向.NET 4.8,作为一种解决方案,因为它没有被任何其他. NET实现使用。所以我不得不在我的Sqlite项目中将
<TargetFramework>netstandard2.0</TargetFramework>
更改为<TargetFramework>net48</TargetFramework>
。huwehgph4#
我还在开发一个ASP.NET(.Net Framework 4.7)Web应用程序,其中我使用了Microsoft.Data.Sqlite版本(5.0.10),但是当我运行它时,它崩溃了,并给予我异常:未找到库e_sqlite3
我几乎花了一天半的时间来解决这个问题。在我的例子中,我已经从包文件夹中删除了“Microsoft.Data.Sqlite”和其他依赖库,如 Microsoft.Data.Sqlite.Core、SQLitePCLRaw.bundle_e_sqlite3、SQLitePCLRaw.core、SQLitePCLRaw.lib.e_sqlite3、SQLitePCLRaw.provider.dynamic_cdecl 等。
现在,我已经添加了新的 Microsoft.Data.Sqlite 版本**(6.0.0)**沿着依赖项。我的应用运行正常。(注意:我只使用过这个库来读取SpatiaLite数据库和调用SpatiaLite函数。)
yuvru6vn5#
转储
Microsoft.Data.Sqlite
以支持System.Data.Sqlite
。它支持3. 38版本的数据库,带有upsert和其他额外功能,没有这样的问题。我做了,而且再也没有回头。不同之处在于名称的大小写:
而不是:
您将分别使用:
iezvtpos6#
在使用Microsoft.Data.Sqlite 5.0.0的.net framework 4.7.2测试库的一个很好的旧NUnit 2 GUI中有这个错误。找到了xUnit解决方案here,它也修复了我的NUnit问题-禁用卷影复制。
fnatzsnv7#
我不得不一直回到Microsoft.Data.Sqlite的版本,它曾经为我的旧项目工作(4.7.2和pre):到1.0.0。有人可能会认为,在发布72个版本的同时,开发人员应该注意到这个问题,但事实并非如此,这要求太高了。我确实检查了:平台子文件夹和DLL都在那里。从一个DLL地狱到另一个!