kay*_*one 26 .net sqlite iis mixed-mode
以前可以使用.NET SQLite库http://sqlite.phxsoftware.com,但最近它们已被主要的SQLite团队接管并移动了System.Data.SQLite下载页面.新包似乎不再包含混合程序集(包含sqlite3.dll和.NET包装器的单个程序集).
新的软件包附带了.NET DLL,SQLite.Interop.dll并且桌面上不需要基于文档但我的应用程序无法加载Unable to load DLL 'SQLite.Interop.DLL': The specified module could not be found..我尝试在IIS/IIS Express下运行应用程序,将apppool设置为32位.
我已经尝试将SQLite.Interop.dll文件复制到文件bin夹,系统文件夹和ASP.NET临时文件夹中,但仍然会收到相同的错误.
是否有可用于新版本的混合组件?如果没有,有没有办法解决Unable to load DLL 'SQLite.Interop.DLL错误?
Tom*_*ell 24
该下载页面现在包含System.Data.SQLite的所有变化,这项工作以同样的方式与早期版本的SQLite,即不要求"混合模式"下载也包括SQLite.Interop.dll在您的项目.
诀窍是 - 在下载链接中查找"bundle"一词
例如sqlite-netFx35-setup- bundle -x86-2008-1.0.76.0.exe
您还将看到这些链接的描述文本以"此安装程序包具有混合模式程序集"开头.
我被烧了是因为我没有意识到这真的意味着"如果你希望它以前所未有的方式工作,那就下载这个".
不知道混合模式程序集的含义,其他链接似乎是一个更好的选择 - 因为他们声称"此安装程序包将安装所有必要的运行时组件和依赖项".
还要注意,判断你是否有"错误"的唯一方法是按文件大小.DLL具有完全相同的名称和完全相同的版本号. 混合模式版本要大得多 - 大约700K.另一个是160K左右.
真是一团糟...
kay*_*one 18
我找到了解决方案.问题是由于SQLite.Interop.dll 的已知问题.
这是对我有用的解决方法.
使用http://dependencywalker.com/中的 Dependency Walker 查看SQLite.Interop.dll(x86和x64)表明它依赖于MSVCR100.dll.
旧的1.0.66.0版本的System.Data.SQLite.dll没有此依赖项.使用当前版本,我们还必须重新分发MSVCR100.dll或从Microsoft运行安装程序.
解决方案:发件人: 缺少msvcr100.dll
使用静态链接.在SQLite.Interop Visual Studio项目中.转到此属性设置:项目 - >属性 - >配置属性 - > C/C++ - >代码生成 - >运行时库,并将值更改为多线程(/ MT).(当前源代码(1.0.71.0)具有多线程DLL(/ MD),这会导致dll依赖于MSVCR100.dll和DLLImport(和LoadLibary())在用户没有它时失败.
我认为应该更改静态链接,因此它是SQLite.Interop.dll的默认值.
我在一个不同的应用程序的插件中遇到了同样的问题.在我的例子中,我通过在第一次引用SQLite之前修改环境变量PreLoadSQLite_BaseDirectory来解决它.
// Make SQLite work... (loading dll from e.g. x64/SQLite.Interop.dll)
System.Environment.SetEnvironmentVariable("PreLoadSQLite_BaseDirectory", System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
Sql.Data.SQLite...
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是必需的,因为我认为PreLoadSQLite_BaseDirectory(好吧,相应的内部变量)将默认为System.Data.SQLite.dll文件的位置.
| 归档时间: |
|
| 查看次数: |
13965 次 |
| 最近记录: |