asp.net出现 "试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)"错误

zaaserz 2021-04-18 09:26:33
起因是我这边需要使用大华相机的dll,这个dll应该是c++ 写的。起初在控制台测试中可以正常运行,但我将这个dll在asp.net 后台服务中使用时页面就会报错,报错原因说的就是 "试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)", web项目已经设置了x86属性,同时网上所说的IIS 的应用程序池启动32位应用程序我也开启了,但是这个错误还是会出现。


...全文
1929 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaaserz 2021-05-06
  • 打赏
  • 举报
回复
问题解决啦,原因就是之前厂家给的dll不正确,厂家给的是64位的dll,重新向厂家要32位dll后就可以正常运行啦。
luj_1768 2021-04-26
  • 打赏
  • 举报
回复
问题可能是:要看一下软件申请的堆大小和加载位置,有可能是软件申请了较大的堆内存,再次申请时却在前一次申请的堆内存未使用部分作为新申请堆内存开始位置。在内存边界检查时会发生系统报错,实际使用时却不会出现内存故障。
zaaserz 2021-04-23
  • 打赏
  • 举报
回复
引用 12 楼 yaotomo 的回复:
我是这样解决的
我这个是不兼容C++的32位dll导致的问题吧,你这个把web设置为64位岂不是更不兼容啦?而且我按照你发的图片进行了尝试后web项目启动就报错啦 未能加载文件或程序集“file:///C:\Users\zh\AppData\Local\Temp\Temporary ASP.NET Files\vs\de883d15\2feee67a\App_global.asax.u1af6bni.dll”或它的某一个依赖项。试图加载格式不正确的程序。
KnightWelling 2021-04-22
  • 打赏
  • 举报
回复
引用 6 楼 zaaserz 的回复:
项目中这个并不能勾选,我发现在Asp.net项目中这个选框不能选中
把你这里的目标平台设置成与C++ dll目标平台一致即可(如果你的进程中不止一个项目,其他项目最好也统一设置)
KnightWelling 2021-04-22
  • 打赏
  • 举报
回复
这类问题一般都是出在C#程序通过系统调用执行C、C++的过程中,原因基本都是程序集格式错误。首先需要了解你要调用的C++库编译时面向的是32位平台还是64位平台,将你的程序修改为对应平台即可,修改的方法是,右键工程,找到属性下的生成页,选择目标平台中的X86、X64
yaotomo 2021-04-22
  • 打赏
  • 举报
回复
我是这样解决的
KnightWelling 2021-04-22
  • 打赏
  • 举报
回复
引用 9 楼 zaaserz 的回复:
[quote=引用 7 楼 KnightWelling 的回复:]这类问题一般都是出在C#程序通过系统调用执行C、C++的过程中,原因基本都是程序集格式错误。首先需要了解你要调用的C++库编译时面向的是32位平台还是64位平台,将你的程序修改为对应平台即可,修改的方法是,右键工程,找到属性下的生成页,选择目标平台中的X86、X64
我调用的那个相机dll应该是面向32的,在嵌入web项目前我用控制台项目进行了测试,控制台项目调为Any Cpu或者x86 都是可以正常运行的。但是移入Web项目后就不能正常运行啦。网上最多的教程就是开启IIS应用程序池的32位程序兼容,但我开启后还是无效[/quote] 你的Web项目有没有引用其他项目?有的话都改为X86平台
zaaserz 2021-04-22
  • 打赏
  • 举报
回复
引用 7 楼 KnightWelling 的回复:
这类问题一般都是出在C#程序通过系统调用执行C、C++的过程中,原因基本都是程序集格式错误。首先需要了解你要调用的C++库编译时面向的是32位平台还是64位平台,将你的程序修改为对应平台即可,修改的方法是,右键工程,找到属性下的生成页,选择目标平台中的X86、X64
我调用的那个相机dll应该是面向32的,在嵌入web项目前我用控制台项目进行了测试,控制台项目调为Any Cpu或者x86 都是可以正常运行的。但是移入Web项目后就不能正常运行啦。网上最多的教程就是开启IIS应用程序池的32位程序兼容,但我开启后还是无效
zaaserz 2021-04-20
  • 打赏
  • 举报
回复
项目中这个并不能勾选,我发现在Asp.net项目中这个选框不能选中
hui1202 2021-04-20
  • 打赏
  • 举报
回复
引用 3 楼 zaaserz 的回复:
[quote=引用 2 楼 hui1202 的回复:]看上去不是什么很麻烦的问题,就是编辑环境问题,看看下面这篇 https://blog.csdn.net/qq_14844633/article/details/71170451
你好, 这篇文章我也看到了,他的前两种方法我都已经设置了并不起作用。文章中的第三种方法我不明白是什么意思,我打开我的工程文件里面没有<Prefer32Bit>false</Prefer32Bit>节点 ,然后我按照文种添加了这个节点。但Prefer32Bit这个节点不能改为true,该为ture的话会报错 错误 CS4023 /platform:anycpu32bitpreferred 只能与 /t:exe、/t:winexe 和 /t:appcontainerexe 一起使用 WebApi [/quote] 因为我没有你那dll的环境做测试,只能帮你找找资料了。 https://cloud.tencent.com/developer/ask/32518
zaaserz 2021-04-20
  • 打赏
  • 举报
回复
这个是我的项目工程文件
zaaserz 2021-04-20
  • 打赏
  • 举报
回复
引用 2 楼 hui1202 的回复:
看上去不是什么很麻烦的问题,就是编辑环境问题,看看下面这篇 https://blog.csdn.net/qq_14844633/article/details/71170451
你好, 这篇文章我也看到了,他的前两种方法我都已经设置了并不起作用。文章中的第三种方法我不明白是什么意思,我打开我的工程文件里面没有<Prefer32Bit>false</Prefer32Bit>节点 ,然后我按照文种添加了这个节点。但Prefer32Bit这个节点不能改为true,该为ture的话会报错 错误 CS4023 /platform:anycpu32bitpreferred 只能与 /t:exe、/t:winexe 和 /t:appcontainerexe 一起使用 WebApi
zaaserz 2021-04-19
  • 打赏
  • 举报
回复
手动顶一下,有没有遇到过该问题的大佬,求帮助!!
hui1202 2021-04-19
  • 打赏
  • 举报
回复
看上去不是什么很麻烦的问题,就是编辑环境问题,看看下面这篇 https://blog.csdn.net/qq_14844633/article/details/71170451

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧