定期我得到以下异常:
无法加载DLL 'SQLite.Interop.dll':无法找到指定的模块。(异常来自HRESULT: 0x8007007E)
我使用的是1.0.82.0。在VS2010, Win7 64操作系统下使用nuget安装。
一旦异常开始出现,它就会不断出现——在调试和发布中,在VS内部或外部运行应用程序。
阻止它的唯一方法就是退出并重新登录。不抛出异常并加载dll。 它可以工作几天,但之后又会坏掉。
有人见过这样的情况吗,有解决方案吗?
定期我得到以下异常:
无法加载DLL 'SQLite.Interop.dll':无法找到指定的模块。(异常来自HRESULT: 0x8007007E)
我使用的是1.0.82.0。在VS2010, Win7 64操作系统下使用nuget安装。
一旦异常开始出现,它就会不断出现——在调试和发布中,在VS内部或外部运行应用程序。
阻止它的唯一方法就是退出并重新登录。不抛出异常并加载dll。 它可以工作几天,但之后又会坏掉。
有人见过这样的情况吗,有解决方案吗?
当前回答
这里确实有很多答案,但我的答案简单明了,没有gac。
问题是,可执行文件需要一个正确的SQLite.Interop.dll (x86或x64)的副本来访问我们的数据库。
大多数架构都有层,在我的例子中,数据层有SQLite连接所需的DLL。
所以我简单地把一个后构建脚本到我的数据层解决方案和一切工作良好。
TL; diana;
在构建选项中将解决方案的所有项目设置为x86或x64。 使用SQLite nuget包将以下Post-Build-Script添加到项目中: /y . xcopy "$(TargetDir)x64" "$(SolutionDir)bin\Debug\
当然,您必须更改发布构建和x86构建的脚本。
STL; diana;
将SQLite.Interop.dll放在*.exe文件旁边。
其他回答
我在这个问题上挣扎了很长一段时间,偶尔会发现测试设置不正确。请看这张图片:
我只要取消测试设置,问题就消失了。否则会出现异常。 希望这能帮助到一些人。 不确定这是根本原因。
I got the same problem. However, finally, I can fix it. Currently, I use Visual Studio 2013 Community Edition. I just use Add->Existing Item... and browse to where the SQLite.Data.SQLite files are in (my case is 'C:\Program Files (x86)\System.Data.SQLite\2013\bin'). Please don't forget to change type of what you will include to Assembly Files (*.dll; *.pdb). Choose 'SQLite.Interop.dll' in that folder. From there and then, I can continue without any problems at all. Good luck to you all. ^_^ P.S. I create web form application. I haven't tried in window form application or others yet.
大会上会有竞争吗?检查DLL上是否有其他具有文件锁的应用程序。
如果是这个原因,使用Sysinternal的Process Explorer之类的工具来发现有问题的程序应该很容易。
HTH, 粘土
即使这是一篇旧文章,我也想在这里分享我找到的解决方案: http://system.data.sqlite.org/index.html/info/54e52d4c6f
如果您不想读取所有问题,解决方案是将“msvcr100.dll”文件(可以在Windows\System32目录中找到)复制到与SQLite.Interop.dll相同的路径。
我建议阅读问题以了解原因,并在安装程序中包含该文件,但仅在错误发生时才安装它,我在安装程序选项中使其成为可选组件。
HTH, Formentz
因此,在添加了NuGet之后,部署不会复制Interops。你可以把这个添加到你的csproj文件中,它应该会修复这个行为:
<PropertyGroup>
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
<CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
<CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
<CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
</PropertyGroup>
如果你看一下NuGet for SQLite的源代码,你可以看到这些具体在做什么。这允许我使用ASP进行部署。净的核心。