Web API 无法引用 DLL

use*_*925 2 c# asp.net iis dll asp.net-web-api

我有一个 .Net 4.5 项目,该项目已构建为 64 位 DLL,需要包含在我的 Web API 项目中。Web API 项目也是针对 64 位构建的。无论我尝试什么,我都会收到异常“无法加载文件或程序集'*.DLL'或其依赖项之一。找不到指定的模块。 ”。此 DLL 是从混合模式项目创建的,该项目包含非托管 C++ 项目和使用 /clr 编译的 C++/CLI 包装器。

我已经使用 DependencyWalker 来检查并确保所有依赖项 DLL 都与 Web API 项目以及文件夹位于同一文件夹中bin。我还检查了位数以确保它们都是 64 位的。然后,我创建了一个 C# 控制台项目,该项目加载此 DLL 及其依赖项,并且一切正常。

我的 Web API 项目使用本地 IIS 6.2 服务器,应用程序池使用默认标识 (ApplicationPoolIdentity)。即使我将身份更改为 NetworkService 它仍然失败。此时我不知道如何进一步调试。我之前曾使用 Process Monitor 来确定丢失的 DLL,但不确定如何将其与 Web API 一起使用。任何有关如何处理此问题的建议将不胜感激。

编辑- 这是 Fusion 日志:

手术很成功。绑定结果:hr = 0x0。操作成功完成。

程序集管理器加载自:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 在可执行文件 c:\windows\system32\inetsrv\w3wp.exe 下运行 --- 下面是详细的错误日志。

=== 预绑定状态信息 === 日志:DisplayName = TestBridge(部分) WRN:为程序集提供了部分绑定信息:WRN:程序集名称:TestBridge | 域 ID:12 WRN:当仅提供部分程序集显示名称时,会发生部分绑定。警告:这可能会导致活页夹加载不正确的程序集。WRN:建议为程序集提供完全指定的文本标识,WRN:由简单名称、版本、区域性和公钥令牌组成。警告:请参阅白皮书 http://go.microsoft.com/fwlink/?LinkId=109270了解更多信息和此问题的常见解决方案。日志:Appbase = file:///D:/build/MSVC/ImageSearchService/ 日志:初始 PrivatePath = D:\build\MSVC\ImageSearchService\bin 日志:动态基础 = C:\Windows\Microsoft.NET\Framework64\v4 .0.30319\Temporary ASP.NET Files\imagesearchservice\d0503829 日志:缓存基础 = C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\imagesearchservice\d0503829 日志:AppName = 7ee35914 调用程序集:(未知)。=== 日志:此绑定在默认加载上下文中启动。日志:使用应用程序配置文件:D:\build\MSVC\ImageSearchService\web.config 日志:使用主机配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config 日志:使用计算机配置文件来自 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config。日志:此时策略未应用于引用(私有、自定义、部分或基于位置的程序集绑定)。日志:尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/imagesearchservice/d0503829/7ee35914/TestBridge.DLL。日志:尝试下载新的 URL 文件:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/imagesearchservice/d0503829/7ee35914/TestBridge/TestBridge.DLL。日志:尝试下载新的 URL 文件:///D:/build/MSVC/ImageSearchService/bin/TestBridge.DLL。日志:程序集下载成功。尝试设置文件:D:\build\MSVC\ImageSearchService\bin\TestBridge.dll 日志:进入下载缓存设置阶段。日志:程序集名称为:TestBridge,版本=0.0.0.0,Culture=neutral,PublicKeyToken=null 日志:部分指定的程序集绑定从应用程序目录成功。需要重新申请政策。日志:使用应用程序配置文件:D:\build\MSVC\ImageSearchService\web.config 日志:使用主机配置文件:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config 日志:使用计算机配置文件来自 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config。日志:此时策略未应用于引用(私有、自定义、部分或基于位置的程序集绑定)。日志:绑定成功。从 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\imagesearchservice\d0503829\7ee35914\ assembly\dl3\584c8f8c\64f0e4b3_4a53cf01\TestBridge.dll 返回程序集。日志:程序集在默认加载上下文中加载。

Den*_*her 5

您可能需要在 VS 2013 / 2015 / 2017 中启用 64 位 IIS Express 支持:

工具 -> 选项 -> 项目和解决方案 -> Web 项目 -> 使用 64 位版本的 IIS Express

归功于这个问题的回答