我遇到了这个异常
DllNotFoundException: Unable to load DLL 'e_sqlite3': The specified module could not be found. (Exception from HRESULT: 0x8007007E
在此行:
SQLiteConnection connection = new SQLiteConnection(App.databasePath)
所以,我有一个带有本地数据库的简单CRUD应用程序。一切都可以在AnyCPU,x86和x64的Debug甚至Even release构建模式下正常工作,但是当我使用Visual Studio安装程序制作安装程序时,此问题开始。我通过添加项目输出文件(主输出)+应用程序图标和空的数据库文件来做到这一点。
在我使用安装程序安装它后,出现该错误。如我所说,在Visual Studio中,它运行良好。
编辑:看来我正在寻求解决方案。现在我看到在调试版本中,我有2个文件夹x86和x64以及该文件,而在安装文件夹中我没有创建文件夹和文件的权限?我该如何解决?
答案 0 :(得分:0)
您需要将x86
的项目构建设置为x64
或SQLite3
。 x86路由将具有更大的兼容性,因此,除非您执行某些特定的64位操作,否则请使用该选项。
还请确保在属性工具窗口中将SQLite3的副本设置为输出以始终复制。
并确保如上所述将您的项目设置为x86选项。
答案 1 :(得分:0)
首先了解一些背景。
与常规DLL不同,.NET DLL实际上并不包含在目标计算机上运行的代码。 AnyCPU / x86 / x64标志指示DLL支持哪些平台,但是指令本身是通用中间语言字节码。 .NET JIT编译器需要在运行时加载DLL并根据应用程序是以32位还是64位模式运行来生成实际的汇编指令。
回到您的问题。您同时拥有x86和x64 DLL的事实向我暗示您使用的是SQLite版本,其中他们提供了分别设置32位和64位标志的单独DLL。如果您的应用程序针对一个或另一个,那么您要做的就是将适当的版本添加到您的项目中,然后在文件属性中将“构建操作”设置为“无”,并将“复制到输出目录”设置为“如果更新则复制” “。
如果您的项目是使用AnyCPU构建的,则必须将两个文件都添加到项目中,如果文件名相同,则使用不同的子文件夹。然后,在执行任何SQLite操作之前,您将必须在运行时确定您的应用运行的是32位还是64位模式,并手动加载适当的DLL。 This article显示了将执行此操作的一些代码,它仅查看IntPtr.Size
的值来确定模式并调用Assembly.LoadFrom()
进行加载。加载后,所有其他SQLite命令将正常运行。
然而,最好,最简单的解决方案是只使用对32位和64位都设置了标志的SQL版本。为此,您需要回顾一下SQLite下载页面,或者通过右键单击yoru项目,选择“管理NuGet程序包”,单击“浏览”并选择“ System.Data.SQLite”项目。
答案 2 :(得分:-1)
ch笔记 Chilkat软件技术说明
非Windows系统(Linux,iOS,MacOSX等)上的HTTP“管道中断”错误
HomeUncategorized在非Windows系统(Linux,iOS,MacOSX等)上的HTTP“断线”错误
2019年9月6日
非Windows系统(Linux,iOS,MacOSX等)上的HTTP“管道中断”错误
如果您在发送HTTP请求的方法的任何LastErrorText中看到错误行“据我们所知连接已经存在。”,后跟“ socketError:断开的管道”,则表示以下内容:服务器已回复上一个没有“ Connection:close”标头的请求,因此允许客户端为下一个请求保持连接打开状态。但是,当客户端(Chilkat)发送下一个请求时,该连接实际上已关闭(因此,“管道中断”)。
解决方案:应该在Chilkat v9.5.0.79及更高版本中解决此问题。 Chilkat将自动(内部)重新连接到服务器,然后发送请求。
FullRequestBd:
DllDate: Mar 13 2019
ChilkatVersion: 9.5.0.77
UnlockPrefix:
Architecture: Little Endian; 64-bit
Language: Cocoa Objective-C
VerboseLogging: 0
uriPath: ***
fullRequestBody:
autoReconnect: 1
Sending request with body...
sendReqBody:
sendReqHeader:
omitContentType: 0
sendReqHeader2:
checkEstablishConnection:
The connection already exists, as far as we know..
--checkEstablishConnection
addAuthAws:
AwsSignatureVersion: 4
buildAwsCanonicalQueryParams:
queryParams:
canonicalizedQueryParams:
--buildAwsCanonicalQueryParams
awsAuthHeaderV4:
finalSignature: ***
authHeaderValue: AWS4-HMAC-SHA256 Credential=xxx/yyy6/eu-west-3/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=***
--awsAuthHeaderV4
--addAuthAws
--sendReqHeader2
--sendReqHeader
Error sending on socket (1)
socketErrno: 32
socketError: Broken pipe
send_size: 16413
Failed to send TLS message.
--sendReqBody
--fullRequestBody
Failed.
--FullRequestBd