Web API无法引用DLL

时间:2014-04-07 23:36:13

标签: c# asp.net iis dll asp.net-web-api

我有一个.Net 4.5项目,它已构建为需要包含在我的Web API项目中的64位DLL。 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:程序集名称:TestBridge |域名ID:12 WRN:A   仅部分程序集显示名称为时发生部分绑定   提供。警告:这可能导致活页夹加载不正确   部件。警告:建议提供完全指定的文本   程序集的身份,WRN:由简单名称组成,   版本,文化和公钥令牌。警告:见白皮书   http://go.microsoft.com/fwlink/?LinkId=109270了解更多信息和   这个问题的常见解决方案。日志:Appbase =   file:/// D:/ build / MSVC / ImageSearchService / LOG:Initial PrivatePath =   D:\ build \ MSVC \ ImageSearchService \ bin日志:动态Base =   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。   日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary   ASP.NET   文件/ imagesearchservice / d0503829 / 7ee35914 / TestBridge / TestBridge.DLL。   日志:尝试下载新网址   文件:/// d:/build/MSVC/ImageSearchService/bin/TestBridge.DLL。日志:   程序集下载成功。尝试设置文件:   D:\ build \ MSVC \ ImageSearchService \ bin \ TestBridge.dll日志:进入   下载缓存设置阶段。日志:程序集名称是:TestBridge,   Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null LOG:A   部分指定的程序集绑定从应用程序成功   目录。需要重新申请政策。日志:使用应用程序   配置文件: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   文件\ imagesearchservice \ d0503829 \ 7ee35914 \装配\ DL3 \ 584c8f8c \ 64f0e4b3_4a53cf01 \ TestBridge.dll。   日志:程序集在默认的加载上下文中加载。

2 个答案:

答案 0 :(得分:4)

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

  

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

相信此question

中的回复

答案 1 :(得分:1)

尝试以下方法:

  1. Fusion Log以获取更好的错误消息:http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.110).aspx
  2. 确保App Pool为4.0
  3. 转到IIS中的应用程序池设置并检查“启用32位应用程序”是否为真
  4. 如果Fusion Log显示所有内容都是桃子,则可能是依赖模块的问题非托管 ..使用 SysInternal的ProcMon 实用程序查看是否有报告任何问题。
  5. 另一个问题是检查机器上的VC ++ 11运行时..有些机器安装了它,有些则没有。
  6. 检查CPU(任何cpu,x86再次64)只是为了确定。