【问题标题】:Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found. Error on Windows Server 2012无法加载 DLL 'SQLite.Interop.dll':找不到指定的模块。 Windows Server 2012 上的错误
【发布时间】:2017-03-20 21:50:50
【问题描述】:

我有一个多项目解决方案 (C#),我正在尝试将其部署到我们的一个测试服务器。所有项目都是为 x64 构建的,在适用的情况下禁用了“首选 32 位”。

一些项目引用了使用 SQLite 加密扩展(不由 nuget 管理)的 SQLite dll 集。当我在本地开发机器上构建和安装解决方案时,应用程序和 Windows 服务能够正常运行,没有问题。

当我尝试在我们的一台运行 64 位 Windows Server 2012 的测试服务器上安装相同的软件包时,我收到“无法加载 DLL 'SQLite.Interop.dll':找不到指定的模块。 "每当我尝试与 SQLite 数据库通信时。我已经三次检查安装后所有适当的 DLL 是否都在程序文件夹中。

在我的 VS 解决方案中,我尝试创建 x86/x64 文件夹,将 Copy 设置为 Always,但无济于事。我还将本地安装文件夹中的 DLL 复制到服务器文件夹中,以查看是否有任何问题。

可能是权限问题吗?我是高级用户,但不是服务器上的完整管理员,而我是我机器上的完整管理员。我已经尝试手动修改程序文件夹的权限以查看这是否是一个问题,但也没有运气。

总而言之,该项目是为 x64 明确构建的,它在正确的文件夹中具有正确的 DLL,并且可以在本地安装上运行。我不知道为什么它在服务器安装上不起作用。我查看了 StackOverflow、MSDN 和 SQLite 网站上的无数线程,通常都建议使用 x86/x64 文件夹,但这对我不起作用。我希望有人可以在这里帮助我。

谢谢!

【问题讨论】:

    标签: c# .net sqlite dll windows-server-2012


    【解决方案1】:

    经过更多调试后实际上能够弄清楚。安装在服务器上的 Visual C++ 运行时版本不正确。我将Merge Module添加到我的项目期望的版本的安装程序中,在服务器上重新安装了该应用程序,现在它运行良好。

    对于遇到此问题的用户,请在 C:\Program Files(x86)\Common Files\Merge Modules 中查找正确版本的 VC++ 运行时。如果您不知道需要什么版本,请在抛出错误的机器上使用依赖项步行器之类的东西。我的告诉我我缺少 VC140,所以这是我复制到我的项目中并添加到安装程序中的模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      相关资源
      最近更新 更多