我有一个多项目解决方案(C#),我正试图部署到我们的一个测试服务器。所有的项目都是为x64而构建的,其中包括' Prefer 32 bit'适用时禁用。
某些项目引用了使用SQLite加密扩展的SQLite DLL集(不受nuget管理)。当我在本地开发机器上构建和安装解决方案时,应用程序和Windows服务能够正常运行,没有问题。
当我尝试在运行64位Windows Server 2012的测试服务器上安装相同的软件包时,我得到了#34;无法加载DLL' SQLite.Interop.dll':找不到指定的模块。"每当我尝试与SQLite数据库通信时。我已经三次检查安装后所有相应的DLL都在程序文件夹中。
在我的VS解决方案中,我尝试创建x86 / x64文件夹,将Copy设置为Always,但无济于事。我还将DLL从我的本地安装文件夹复制到服务器文件夹中,看看是否有东西搞砸了。
可能是权限问题吗?我是一个提升用户,但不是服务器上的完整管理员,而我是我的计算机上的完整管理员。我已经尝试手动修改程序文件夹的权限,看看这是否是一个问题,但也没有运气。
总而言之,该项目是为x64显式构建的,它在正确的文件夹中有正确的DLL,并且可以在本地安装上运行。我不知道为什么它不能在服务器安装上工作。我已经浏览了StackOverflow,MSDN和SQLite网站上的无数线程,这些线程通常都建议使用x86 / x64文件夹,但这并没有为我工作。我希望有人可以帮助我。
谢谢!
答案 0 :(得分:0)
实际上能够在经过一些调试之后弄明白。安装在服务器上的Visual C ++运行时版本不正确。我将合并模块添加到我的项目所期望的版本的安装程序中,在服务器上重新安装了应用程序,现在它的工作非常好。
对于遇到此问题的人,请在 C:\ Program Files(x86)\ Common Files \ Merge Modules 中查找正确版本的VC ++运行时。如果您不知道需要什么版本,请在抛出错误的计算机上使用依赖于walker的内容。我告诉我,我错过了 VC140 ,所以这是我复制到项目中并添加到安装程序中的模块。