2012-04-12 85 views
0

在某些机器上使用SQLite导致havok数次将我的头部拧得过头之后,我偶然发现了“Managed Only”版本的库。 http://sourceforge.net/projects/sqlite-dotnet2/files/SQLite%20for%20ADO.NET%202.0/1.0.66.0/使用ILMerge后未找到DLL

我很兴奋,把它放到我的项目文件夹中,所以现在我的项目在每个人的计算机上工作,不管架构如何!

事实上,我非常兴奋,我决定再次尝试使用ILMerge(因为我所有的依赖关系现在都被管理),而不必将DLL文件作为资源复制,并在检测到它们不存在时将其写入输出文件夹。

我编译使用以下命令的EXE:

ilmerge.exe /target:winexe /zeroPeKind /out:"Core View.exe" CoreView.exe System.Data.SQLite.dll OpenHardwareMonitorLib.dll

(需要的zeroPeKind标志,因为虽然SQLite是管理,它不标记为这样的,并导致对编译错误,如果zeroPeKind ISN” T,则)

现在的问题是,虽然它开始了罚款,我在尝试做任何数据库操作时出现以下错误时,DLL文件不存在:

System.DllNotFoundException: Unable to load DLL 'System.Data.SQLite.DLL'

我可以很容易地解决这个问题吗?

+0

System.Data.SQLite.dll实际上不是唯一的管理。您下载的二进制文件使用pinvoke来访问sqlite3.dll的非托管功能。 – Will 2012-04-13 01:06:49

+0

你确定吗?我下载了标有“仅限管理”的二进制文件,而不是正常使用的二进制文件。 – CJxD 2012-04-13 08:11:58

+0

是的。 System.Data.SQLite的人不做一个完全管理的人。在某些时候,你仍然有非托管代码。意思是你不能使用System.Data.SQLite而没有外部DLL。 – Will 2012-04-13 13:30:26

回答