2

我正在尝试在 .net MVC 应用程序中使用 win32 DLL。但是我不断收到以下错误Unable to load DLL 'experiment_dll.dll': The specified module could not be found

当尝试加载 DLL 的代码执行时,我使用 Process Monitor 来捕获文件系统活动。说明可以看到DLL,并且大部分文件系统操作都成功了。

文件系统活动的两个全尺寸屏幕截图 -

屏幕截图 1

屏幕截图 2

如您所见,其中一项操作的结果之一是FILE LOCKED WITH ONLY READERS. 这可能是 DLL 无法加载以及错误消息说找不到 DLL 的原因吗?

UPDATE:我发现这个论坛帖子说这个结果实际上是成功的,所以不应该是问题 - http://forum.sysinternals.com/topic21378.html

如果这是权限问题,如何解决?我已经让 App Pool 完全控制 DLL 文件以及 Bin 和 Root 文件夹。

我已经尝试创建一个测试 MVC 应用程序和一个测试 DLL(它只导出一个接受 bool 并返回相同 bool 的函数。我尝试制作测试 MVC x86 和 DLL win32(两个发布版本)并设置Enable 32-Bit Applications应用程序池设置为 true。我还尝试过测试 MVC x64 和 DLL x64(两个发布版本)并将Enable 32-Bit ApplicationsApp Pool 设置设置为 false。我也尝试过Any Cpu配置。所有都产生相同的错误并且都产生相同的文件系统活动如屏幕截图所示。

我在发布到在 Azure 虚拟机上运行的 IIS 8.5、Windows Server 2012 R2 时遇到了这个问题。

当发布到免费mywebsite.azurewebsites.net或在我的开发机器上运行时,DLL 加载没有问题。

4

1 回答 1

2

事实证明,在服务器上使用 Dependency Walker 检查 DLL 后,与 Visual Studio 一起安装的依赖项在服务器上不可用,MSVCR120.dll. 最初我认为因为我自己没有给 DLL 任何依赖项,所以不会有任何可能丢失的依赖项。所以我忽略了它。糟糕的决定!

于 2014-04-30T14:50:23.077 回答