【发布时间】:2019-02-06 18:58:54
【问题描述】:
背景:
我正在将控制台应用程序迁移到我们现有的 Web API 项目中。所有开发工作均在 Visual Studiod 2015(使用 IIS Express)上完成。该应用程序使用很少的第三方数据源 API DLL 从该数据源中获取数据。所有这些 DLL 都由我们内部的 nuget 包源管理。
问题:
现在控制台应用程序运行良好并且可以加载这些 DLL。我将逻辑复制到我的 Web 项目中,并通过 nuget 添加了 DLL。解决方案构建,但在启动 Web 项目时出现以下错误:
Could not load file or assembly 'ABC.DLL' or one of its dependencies. The specified module could not be found.
其中 ABC.DLL 是第三方 DLL 之一。
我做了以下事情:
- 确认 ABC.DLL 在我的 web 项目的 bin 文件夹中
- 将我的 Web 项目的目标构建平台更改为 x86 并取消选中 VS2015 中的“为网站和项目使用 64 位版本的 IIS Express”设置(第三方 dll 为 32 位)
- 在 ABC.DLL 的依赖上运行 dumpbin.exe 并得到 XYZ.dll,MSVCR120.dll,KERNEL32.dll,MSVCP120.dll,mscoree.dll
关于最后一步,bin文件夹中的那些dll都不见了(但最后4个dll应该在system32 win目录中所以应该没有关系?)
对于 XYZ.dll,它是另一个第三方库,位于 C:\Program Files (x86)\XYZ\ 文件夹中。我手动将它复制到 web 项目 bin 文件夹(实际上复制到 XYZ 文件夹内的所有 Dll 中),但仍然遇到同样的问题。
问题
- 我在这里缺少什么?控制台应用程序显然可以加载 ABC.DLL 但 Web 项目不能。如果您能告诉我下一步要检查什么,不胜感激。
- 启动网页的错误消息不是很有用,有没有办法找出 Web 项目试图加载第三方 DLL 的位置?
提前谢谢你!
【问题讨论】:
-
由于您运行的是 32 位,因此您应该确保所有五个本机依赖项都可以通过系统路径获得。在你的情况下,验证
MSVCR120.dll和MSVCP120.dll在%windir%\sysWOW64中,你也可以在那里复制XYZ.dll。
标签: asp.net dll web-deployment .net-assembly iis-express