【问题标题】:Unable to load DLLs when starting up IIS Express hosted web project (VS2015)启动 IIS Express 托管 Web 项目 (VS2015) 时无法加载 DLL
【发布时间】: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.dllMSVCP120.dll%windir%\sysWOW64 中,你也可以在那里复制XYZ.dll

标签: asp.net dll web-deployment .net-assembly iis-express


【解决方案1】:

只是将外部 DLL 添加到您的 Bin 文件夹不是一个好主意。由于各种原因,文件可能会从此文件夹中消失,例如您的团队成员删除看似无用的 DLL,或通过 Visual Studio 清除它。此外,您的解决方案中引用项目的输出 DLL 最终会出现在那里,并且在您每次构建项目时都会被替换。

对于第三方 DLL,您应该做的是在您的项目中或附近创建一些“依赖项”文件夹,并将 DLL 粘贴在其中。然后您应该右键单击项目,选择添加引用,浏览到新的“依赖项”文件夹,然后以这种方式添加对 DLL 的引用。这类似于 NuGet 的工作方式;它将 DLL 保存在 packages 文件夹内各自的文件夹中,并添加对这些 DLL 的引用。

【讨论】:

  • 谢谢,我已经创建了一个“Lib”文件夹并将所有的 DLL 放在那里。然后我在项目中添加了对它们的引用。我可以看到它们被复制到 bin 目录下的 Lib 文件夹中,但似乎仍然无法加载 ABC.DLL。我很困惑为什么控制台应用程序可以工作,但不能在 Web 项目中工作?
  • 这些 DLL 是否是使用较新版本的 .NET 框架制作的?
【解决方案2】:

我终于找到了问题,感谢大家的帮助,我不得不在 VS 中禁用卷影复制(在 64 bit managed assembly with unmanaged dependencies not loading in IIS / ASP.NET MVC 4 中提到)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 2011-09-04
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    相关资源
    最近更新 更多