启动IIS Express托管的Web项目时无法加载DLL(VS2015)

问题描述 投票:1回答:2

背景:

我正在迁移控制台应用程序,以成为现有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的位置?

先感谢您!

asp.net dll web-deployment .net-assembly iis-express
2个回答
0
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.