我有一个.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。 日志:程序集在默认的加载上下文中加载。
答案 0 :(得分:4)
您可能需要在VS 2013/2015 / 2017中启用64位IIS Express支持:
工具 - >选项 - >项目和解决方案 - >网络项目 - >使用 64位版本的IIS Express
相信此question
中的回复答案 1 :(得分:1)
尝试以下方法: