gpt4 book ai didi

c# - SQLite.SQLite3 : Exception System. DllNotFoundException

转载 作者:行者123 更新时间:2023-12-05 07:31:57 24 4
gpt4 key购买 nike

我能够在我的开发箱上构建和执行我的 Winforms 应用程序,但是当我尝试在另一个干净的箱子(虚拟机)上运行我的应用程序时,我遇到了这个错误。

Application: MyApp.exe
Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.DllNotFoundException
at System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none(System.Data.SQLite.SQLiteConfigOpsEnum)
at System.Data.SQLite.SQLite3.StaticIsInitialized()
at System.Data.SQLite.SQLiteLog.Initialize()
at System.Data.SQLite.SQLiteConnection..ctor(System.String, Boolean)
at System.Data.SQLite.SQLiteConnection..ctor()
at DittoSql.SQL..ctor()
at MyApp.Program..cctor()

Exception Info: System.TypeInitializationException
at MyApp.Program.Main(System.String[])

我使用 Nuget 将 SQLite 添加到我的项目中。

SQLite added to project using NuGet

遗憾的是,事件查看器日志没有提供系统找不到的DLL。我做了研究,发现的一件事是 .Net 兼容性。我在 4.6.2,SQLite v1.08 不支持,所以我降级到 .Net 4.6,已列出。

两台机器都运行带有所有最新更新的 Windows 10 X64。

这是显示文件的应用程序文件夹的屏幕截图。

Application folder showing SQLite files

更新

根据@Plutonix 的评论,这里是显示对我的项目的引用的屏幕截图。缺少 System.Data.SQLite.Core,其中包含互操作文件。每个 .Net 版本和操作系统类型都有不同的版本,所以我不能只浏览 packages 文件夹中的文件夹,除此之外这是一个可怕的 hack。应该有一种干净的方式来添加引用。

Project references missing System.Data.SQLite.Core

作为记录,我简要地想到了那个文件,但我没有看到它,或者核心和计算版本 1.08 没有使用它,但我猜它确实有。

注意:我将 SQLite.Interop.dll 文件手动复制到 VM 并加载了项目。 Procman 没有那么有用,也许信息太多了,尽管我过滤掉了除我的应用程序以外的所有内容。无论如何,问题是如何获得对 SQLite 核心的引用。

更新 2

从 NuGet 中卸载所有 sqlite 组件然后重新安装 SQLite 不会在项目中添加对核心的引用,这很烦人。

更新 3

This SO文章(在答案中)说明了问题。基本上,无论出于何种困惑的原因,NuGet 都正确地“需要”核心,但随后却什么都不做。因此,NuGet 不会分发所需的文件。我看到了“复制”X86/X64 文件夹等的答案。

首先,我将其命名为 NuGet SQLite 程序包中的严重缺陷/错误。是的,如果您知道答案,那么这个问题有点像引用问题的重复,但我不知道,所以不是。我从未在互操作 DLL 上收到任何错误消息。

最佳答案

(我希望有人能提出更好的答案,因为我的答案是 hack。)

在出现真正优雅和适当的解决方案之前,我想到了这个解决方法。将以下内容添加到项目设置的 Build Events` 选项卡上的 Post-build event command line。



任何使用我的命令行的人显然必须将 net46 设置为项目中使用的 .Net 版本并将 SQLite 版本设置为 1.0.108.0版本将是。



robocopy "$(ProjectDir)\..\packages\System.Data.SQLite.Core.1.0.108.0\build\net46\$(PlatformName)" $(TargetDir) SQLite.Interop.dll

这是截图。

Post Build Events Showing robocopy

注意

我还想到了包含 DLL 的项目文件的条件逻辑,但这比简单的 RoboCopy 更复杂。

关于c# - SQLite.SQLite3 : Exception System. DllNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com