背景:
我正在迁移控制台应用程序,以成为现有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之一。
我做了以下事情:
关于最后一步,bin文件夹中的所有dll都丢失了(但最后4个DLL应该在system32 win目录中,所以应该没关系?)
至于XYZ.dll,它是另一个第三方库,位于C:\ Program Files(x86)\ XYZ \文件夹中。我手动将它复制到web项目bin文件夹(实际上复制到XYZ文件夹中的所有Dll)并仍然得到相同的问题。
问题
先感谢您!
只需将外部DLL添加到Bin文件夹就不是一个好主意。由于各种原因,文件可能会从此文件夹中消失,例如您的团队成员删除看似无用的DLL,或通过Visual Studio清除它。此外,解决方案中引用项目的输出DLL将最终存在,并在每次构建项目时替换。
您应该为第三方DLL做些什么,在项目中或附近创建一些“依赖项”文件夹,并将DLL粘贴在那里。然后,您应该右键单击该项目,选择Add Reference,浏览到新的“dependencies”文件夹,然后以这种方式添加对DLL的引用。这类似于NuGet的工作方式;它将DLL保存在packages文件夹中的各自文件夹中,并添加对这些DLL的引用。
我终于找到了问题并感谢所有的帮助,我不得不在VS中禁用阴影复制(在64 bit managed assembly with unmanaged dependencies not loading in IIS / ASP.NET MVC 4中提到)。