具有非托管依赖项的 64 位托管程序集未在 IIS/ASP.NET MVC 4 中加载

2024-03-12

我有一个几乎空的 ASP.NET MVC4 项目,引用 64 位托管程序集,该程序集具有一组非托管依赖项。

通过引用以正常方式引用托管程序集。

非托管依赖项会在构建后事件中复制到 bin 文件夹,并在 Web 应用程序启动时出现(这已得到验证)。

问题是我得到:

无法加载文件或程序集“msvcm80.DLL”或其依赖项之一。动态链接库 (DLL) 初始化例程失败。 (HRESULT 异常:0x8007045A)

这是非托管依赖项之一。完整列表是:

  • dll
  • lbm.dll
  • libeay32.dll
  • msvcm80.dll
  • msvcp80.dll
  • msvcr80.dll

托管 dll 是针对 x64 构建的,所有依赖项也是 x64(通过使用 Dependency Walker 进行验证)。

现在我还创建了一个空白控制台应用程序、一个 Windows 窗体应用程序和一个自托管 Web Api,其中包含相同的代码(用于使用托管程序集启动实例),并且它们都工作正常(当强制构建目标为x64)。

使用 Fusion Log(首先清除它,然后加载 Web 应用程序并刷新日志查看器),我可以看到加载时出现问题:

  • dll
  • libeay32.dll
  • lbm.dll

它们都有相似的日志文件:

LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/3b2d5b3e/b1b5f1f5/iconv.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/root/3b2d5b3e/b1b5f1f5/iconv/iconv.DLL.
LOG: Attempting download of new URL file:///C:/.../bin/iconv.DLL.
LOG: Assembly download was successful. Attempting setup of file: C:\...\bin\iconv.dll
LOG: Entering download cache setup phase.
ERR: Error extracting manifest import from file (hr = 0x80131018).
ERR: Setup failed with hr = 0x80131018.
ERR: Failed to complete setup of assembly (hr = 0x80131018). Probing terminated.

所以它实际上发现依赖项位于本地 bin 文件夹中,但由于某种原因无法使用它们。

错误“从文件中提取清单导入时出错 (hr = 0x80131018)”是什么意思?意思是?

依赖项不在 GAC 中,并且它们不是使用 regsvr32(不是 COM)注册的。

让我困惑的是,它在 IIS 之外工作得很好(我什至尝试将应用程序池上的凭据设置为与本地网络凭据相同 - 当然,这没有什么区别)。

关于如何调试这个问题有什么好主意吗?

EDIT: 我现在可以在本地开发人员计算机上运行 ASP.NET 站点,但是not当它部署到另一台服务器上时。

我的本地计算机的“修复”是从 bin 目录中删除 msvcm80.dll(C 运行时)。该程序集(可能)仍然需要,但在其他地方查找(大概是因为我在 WinSxS 中安装了“正确”版本的 CRT(可分发))。

深入研究后,我发现托管程序集据说依赖于 msvcm80.dll 版本 8.00.50727.6195 (x64),但该特定版本未安装在我的本地系统上(我只将它放在依赖项文件夹中) - 但我确实这样做WinSxs 中有一个较新的版本 (8.00.50727.6910)。

那么,如果不直接将其添加到 bin 文件夹中,IIS 会选择哪一个呢?

2nd EDIT: 因此,看起来 lbm.dll 直接依赖于 msvcr80.dll,但它也依赖于 iconv.dll,而 iconv.dll 又依赖于 msvcr80.dll。但是,根据 Dependency Walker (depends.exe),这两个依赖项不是从同一目录解析的(即使它们具有相同的版本!)。

如果我确保间接依赖项位于 PATH 环境变量中,而第二个依赖项位于 WinSxS 中,则它可以工作。这显然不够好,但我无法弄清楚如何强制从单个位置/文件加载直接和间接依赖项。


使用类似的工具依赖步行者 http://www.dependencywalker.com/你会发现lbm.dll它的依赖仅取决于msvcr80.dll并不是msvcp80.dll and msvcm80.dll即使这两个文件包含在Microsoft.VC80.CRT.manifest被使用过lbm.dll加载正确版本的 Visual C++ 2005 运行时库。

去除msvcp80.dll and msvcm80.dll从你的 bin 文件夹应该可以解决你的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有非托管依赖项的 64 位托管程序集未在 IIS/ASP.NET MVC 4 中加载 的相关文章

  • 为什么 Ajax.BeginForm 在 Chrome 中不起作用?

    我正在使用 c NET MVC2 并尝试创建一个 ajax 表单来调用删除数据库记录 RemoveRelation 的方法 删除记录的过程正在按预期进行 删除记录后 表单应调用一个 JavaScript 函数 从视觉效果中删除该记录 Rem
  • 对于 HTTPS,Request.UrlReferrer 为 NULL

    我在用 Request UrlReferrer AbsoluteUri 在我的项目中获取托管我的应用程序的 URL 如果我从 http 主机重定向 我可以获得 URL 但如果我从 https 主机重定向 我将得到 null 我怎样才能得到
  • 使用 json 向 RESTful WCF 发送 Post 请求

    我已经尝试了每种组合来发送请求 以从 jQuery 向 RESTful WCF 发送 POST 请求 有人可以模仿并使其发挥作用吗 代码在这里 http pastebin com Ua97919C http pastebin com Ua9
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • 如何使用 ASP.NET Web API 生成 ATOM 和 RSS2 提要?

    需要采取哪些步骤来调整 ASP NET Web API 的默认 XML 输出以生成 ATOM 和 RSS2 提要 您将需要实现自定义 MediaTypeFormatter 您可能想查看 Filip 的博客文章用于 ASP NET WebAP
  • 名称在当前上下文中不存在

    所以 我正在我的笔记本电脑和台式机之间完成这个项目 该项目在笔记本电脑上运行 但现在将更新的源代码复制到桌面上后 我的项目中有超过 500 个错误 所有这些错误都是 该名称在当前上下文中不存在 这是一个例子 职位 aspx
  • 防止exe文件上传到网站

    有人可以告诉我如何防止 exe 文件在网站上上传 即使 exe 文件位于 zip 文件内 新文件夹中的 exe 文件 然后压缩并上传新文件夹 允许用户上传文件 如果是 ZIP 并通过解压存档并评估其内容来进行服务器端检查
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • 使用 asp.net 发送 20,000 多封电子邮件

    我正在编写一个应用程序 需要向从我们的数据库中选择的学生发送大量电子邮件 每封电子邮件都将进行个性化 包括他们的姓名 学习课程等 因此需要一次发送一个 我可以在 SmtpClient 上循环执行此操作 但我担心我尝试发送的数字最终会遇到超时
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何从代码隐藏运行存储过程(带参数 - 有返回值)?

    如何使用存储过程 带参数 具有类型的返回值int 从代码后面 我的存储过程如下所示 ALTER Procedure dbo sp Noskheh SumOfTotalPay Co ID int AS Declare Sum bigint B
  • 保护 ASP.NET 网站中 Elmah RSS 源的安全

    我遵循了这个问题的答案在 ASP NET 网站中保护 Elmah 的安全 https stackoverflow com questions 1245364 securing elmah in asp net website限制对 elma
  • 为什么同时存在 System.Net.Http 和 System.Web.Http 命名空间?

    这只是一个简单的问题 因为我正在研究 NET 中可用的各种类库 我注意到有一个System Net Http命名空间和一个System Web Http命名空间 这两个命名空间都有什么用途 创建两个看似不明确的命名空间的动机是什么 是否有任
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • ASP.net Gridview 分页在 UpdatePanel 中不起作用

    虽然类似的问题已经被问过很多次了 但问题仍然没有解决 这是问题 我有一个GridView它包含在选项卡容器中AJAX控件本身位于UpdatePanel Gridview工作得很好并且其相应的方法被准确地触发 但是当我启用paging 例如
  • 在操作之外执行异步操作 asp.net mvc

    我希望能够在每个请求上从云数据库加载用户 并使用 asp net mvc 在控制器中的请求上提供该用户 问题是当前框架不支持从操作过滤器执行异步操作 所以 OnActionExecuting OnAuthorization 方法不允许我这样
  • 单击按钮时增加 ASP.net 中的变量

    我是 ASP NET 新手 我正在使用 VB net 创建一个 ASP net 网站 所以这是我的问题 Dim myCounter as Integer 0 Protected Sub Button1 Click ByVal sender
  • 带有整数字符串的枚举

    我有一个公众号enum像这样 public enum occupancyTimeline TwelveMonths FourteenMonths SixteenMonths EighteenMonths 我将用它来DropDown菜单如下
  • Html Helper“操作”未定义,Asp.NET Core 2.2

    我是 ASP NET Core MVC 的新手 我会在这个问题前说我已经阅读了其他类似的问题 但它们与我遇到的问题并不完全相同 我正在尝试实现动态左侧导航 其中每个按钮都是从我的数据库加载的 当我打电话时 Html Action NavMe
  • ASP.Net CascadingDropDown 和 EnableEventValidation="false"

    我刚刚从 AJAX 工具包中获得了 CascadingDropDown 与 SelectedIndexChanged 一起使用 以重定向到传递所选值的查询字符串的页面 我好高兴啊 但是 我只能通过向页面添加 EnableEventValid

随机推荐