代码之家  ›  专栏  ›  技术社区  ›  Lionet Chen

无法从x64/x86加载dll“sqlite.interop.dll”,但可以与system.data.sqlite.dll一起加载。

  •  0
  • Lionet Chen  · 技术社区  · 6 年前

    我遇到了这个奇怪的问题。在我的wcf项目中,我引用了一个类库,它使用sqlite查询一些静态数据。当然,类库使用的是来自nuget的system.data.sqlite+system.data.sqlite.core+system.data.sqlite.ef6+system.data.sqlite.linq。WCF项目本身不执行查询。它从类库中调用一个方法。

    当我在我的dev机器上运行它时,一切都很好。但是在我将它部署到Windows Server 2012上的IIS之后,异常 Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E) 被扔了。我做了这样的搜索,发现我至少需要在我的主wcf项目中引用system.data.sqlite.core,并确保它在每个文件夹中分别具有相应sqlite.interop.dll的x64和x86文件夹。所述文件夹由nuget引用自动生成,并放置在 文件夹。所以我很高兴。部署。同样的事情也发生了:在dev机器中一切正常,然后无法在服务器上加载dll。

    我甚至尝试引用主WCF项目中的所有nuget包,但都没有用。然后我想尝试手动将dll从x64文件夹复制到我的bin根文件夹中,就在wcf.dll和system.data.sqlite.dll旁边。现在错误消息更改为 Unable to load DLL 'SQLite.Interop.dll': Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

    但是这种行为让我觉得很奇怪,因为在我的开发人员机器和另一个测试服务器中,我不能复制这个。只有在prod服务器上才会引发此错误。

    有什么我忽略的吗?顺便说一句,我试图将我的WCF项目从只针对任何CPU转为X64。我试着用

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lionet Chen    6 年前

    我可能在这有点事。我做了一个程序。在我看来,x86下的DLL找到了。但是,拒绝访问 enter image description here

    现在,它似乎落入了权限领域。在测试环境和我的开发人员机器上,AppPool拥有上帝的特权,所以这个问题不能被复制。

    读取和执行

    进一步的测试显示我的权限设置已关闭,因为我使用了Visual Studio部署功能来部署我的网站。在这个过程中,它将我的网站根目录设置为

    enter image description here