问题标签 [badimageformatexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - .NET 程序集格式有大小限制吗?
我们遇到了一个我以前从未遇到过的有趣问题。我们在 Visual Studio 2008 SP1 中有一个大规模生产的 ASP.NET 3.5 SP1 Web 应用程序项目,它使用网站部署项目进行编译和部署。去年一切正常,直到昨天签入后,该应用程序开始严重失败,并出现BadImageFormatException
.
有问题的签到并没有改变任何特别的东西,错误来自应用程序的甚至没有改变的区域。使用 Reflector 我们检查了有问题的方法,发现代码中有垃圾字符串(.NET Reflector 幽默地将其解释为汉字)。我们一直在多台机器上复制此内容,因此它似乎与硬件无关。
进一步检查表明,在部署期间用作aspnet_merge.exe输入的程序集中不存在这些垃圾字符串。
aspnet_merge.exe / Web 部署项目输出程序集属性:
- 将所有输出合并到一个程序集中
- 将每个单独的文件夹输出合并到自己的程序集中
- 将所有页面和控制输出合并到一个程序集中
- 为每个页面创建单独的程序集并控制输出
在 Web 部署项目属性中,如果我们将合并选项设置为第一个选项(“将所有输出合并到单个程序集”),我们会遇到问题,但所有其他选项都可以正常工作!
我的问题:有人知道为什么会这样吗?aspnet_merge.exe 的功能是否有大小限制(生成的合并 DLL 约为 19.3 MB)?合并 WAP 的输出是否还有其他已知问题?
如果任何汇编格式/aspnet_merge.exe 专家知道这样的限制,我会很高兴。在我看来,就像一个 25MB 的程序集,虽然很大,但并不离谱。
c# - ClickOnce:在 64 位窗口上运行 x86 包时出现 BadImageFormatException
我的 .NET 2.0 应用程序导入非托管 32 位 dll。当用户通过应用程序中的对话框打开文件时,将加载 dll(发生第一次互操作调用)。
当我通过 clickonce 使用目标平台“Any”部署应用程序时,64 位窗口上的用户在尝试从应用程序打开文件时会收到 BadImageFormatException(此时加载了非托管 dll)。我知道这是由于 64 位进程和 32 位非托管 dll 的位数不兼容。
我已经使用 x86 作为目标平台重新部署了应用程序。据我了解,这应该可以解决位数问题。
但
当我在 64 位系统上运行为 x86 构建的已部署应用程序时,我现在在应用程序启动之前立即收到 BadImageFormatException。在至少三台 64 位机器上测试。在 32 位机器上,它可以正常工作。
当我直接从 VS 运行应用程序时(或者不直接运行,只是正常构建,不通过 ClickOnce),使用 x86 目标平台时在 64 位窗口上没有问题。应用程序启动并且用户可以加载文件 - 互操作调用成功。
我已经连续调试了 2 天,但没有任何结果 - 我在不同的计算机上尝试过。它似乎始终可以在我尝试过的一台计算机上运行。但是,我没有永久访问这台计算机的权限。
我已经设法在我的计算机上构建了一次 ClickOnce 部署,它在 64 位机器上运行。这可能是 100 次尝试中的一个!什么都没有改变,唯一改变的变量是我在计算机重新启动后立即成功构建。
我做了很多次清理/重建/重新启动VS/重新启动窗口。我已经重新安装了 VS 2008,现在也重新安装了整个操作系统,但没有帮助。
编辑:我刚刚设法获得了一个好的构建(接下来的 100 个:))并在部署的目录之间进行了比较。问题的根源是ClickOnce在主.exe的清单中生成了错误的目标平台:
处理器架构应该是 x86。
所以问题是如何在部署时始终强制 VS 在清单中生成正确的处理器架构。
有人可以帮忙吗?
.net - 即使平台相同,“试图加载格式不正确的程序”
我正在从 64 位系统上的 32 位非托管 DLL 调用函数。我得到的是:
BadImageFormatException:试图加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)
起初,我将我的项目设置为 Any CPU 平台,因此我将它们都更改为 x86,但仍然出现此错误。这真的是我所知道的唯一解决方法。
DLL 没有损坏或任何东西,因为我可以将它们与其他程序一起使用(我没有源代码)。我想也许它没有找到依赖关系,但我检查了一下,它们都在那里。DllNotFoundException
另外,在那种情况下它不会抛出一个吗?
我还可以做些什么?在您说“改用 64 位非托管 DLL”之前,让我指出没有。;)
asp.net - 发布同时支持 64 位和 32 位的 Web 二进制文件?ASP.NET
我想发布我的应用程序同时支持 32 位和 64 位。我正在使用 elmah 和 SQLite。这两个软件包都有一个单独的 32 位和 64 位二进制文件。我不能同时添加 32 位和 64 位 DLL。我尝试在我的 bin/release 文件夹中添加具有不同文件名的 32 位和 64 位 DLL,但出现错误的图像格式错误。(我通过在 64 位 Windows 服务器上运行并在目录中和我的系统上运行 32 位 DLL 进行了测试)。
我如何发布应用程序,以便可以将同一文件夹作为 32 位或 64 位运行?
c# - “ResolveAssemblyReference”任务失败并且 System.BadImageFormatException,但在任何地方都没有使用程序集!
我收到关于程序集“C:\Ora10g\bin\Zip.exe”的错误。问题是这个解决方案根本不使用 Oracle 中的任何东西。我在项目的任何地方都找不到对 10g 的单一引用。我从另一个离开我们小组的人那里继承了这个。他从来没有遇到过这个问题。我团队的另一位成员说他以前得到过这个,但重新安装 10g 的客户端部分修复了它。那里没有这样的运气。我什至尝试使用 WinGrep 在整个解决方案文件夹中搜索“Ora10g”,但它不存在。
有任何想法吗?在弄清楚如何摆脱对 Oracle 的错误引用之前,我无法构建此解决方案。
VS 2005 解决方案。包含几个 WinForm 应用程序、几个类库和一个 Web 服务。错误发生在主类库项目中。
这是错误消息:
c# - 加载 32 位 DLL 时出现 BadImageFormatException,目标是 x86
我有一个 DLL (FreeType),它肯定是 32 位的(头文件:IMAGE_FILE_MACHINE_I386)。
我想使用 DllImport 从 C# 代码中使用它。
我的应用程序的目标是 x86,IntPtr.Size 是 4,进程是 32 位。
但是我得到了 BadImageFormatException(来自 HRESULT 的异常:0x8007000B)。有什么问题?
当然,我使用的是 64 位 Windows 7。
oracle - 有人在 Sql Server Reporting Services、64 位操作系统和 Oracle 数据源中看到过这种行为吗?
我正在开发一个 Sql Server Reporting Services 解决方案,该解决方案跨 Sql Server 数据源和 Oracle 10g 数据源进行查询。我的开发盒是带有 Sql Server 2008R2 的 Windows 7 64 位,我在该系统上托管 IIS7 和 SSRS 以进行开发;使用 VS.NET 设计报告。
我在运行报告时遇到错误,其中 SSRS 抱怨在 64 位进程中加载 32 位 Oracle 客户端。关于如何解决这个问题有很多线程。问题是,他们都归结为确保您拥有 64 位 Oracle 客户端,我就是这样做的。我遇到的奇怪的事件链是这样的:
- 创建初始 Oracle 数据源并连接报告(有效)
- 编辑 Oracle 数据源连接(它停止使用 BadImageFormatException 32 位/64 位错误消息)
- 卸载并重新安装 Oracle 客户端(它可以工作)
- 再次编辑 Oracle 连接(它停止使用 BadImageFormatException 32 位/64 位错误消息)
每次更改连接字符串时都没有重新安装客户端,我完全不知所措。有没有人见过这种行为?如果是这样,我到底做错了什么?
.net - BadImageFormatException 与 Windows 7 64 中的 .NET ILMerged DLL
我正在使用 Visual Studio 2008 在 Windows 7 64 位中进行开发。我有一组类库,我使用 ILMerge 将它们合并到一个 DLL 中。但是,当我尝试使用这个合并的 DLL 时,我得到了
[ BadImageFormatException : 无法加载文件或程序集“MyMergedDll”或其依赖项之一。试图加载格式不正确的程序。]
我一直在四处寻找帮助,看起来我需要在 MyMergedDll 中的每个项目中将 Build 属性设置为以 x86 为目标,所以我这样做了。我还在 Web 服务中设置了所有非 MSTest 项目,其中我将 MyMergedDll 引用为目标 x86。但是,我仍然收到此错误。
如果可以相信此博客条目,我会因为执行以下操作而收到此错误:
也就是说,对泛型具有类约束。不过,博客条目是 2007 年的,所以我不知道这是否仍然适用。在我追踪项目中的每个泛型类以检查约束之前,我想从 StackOverflow 获得一些关于你们认为问题所在的信息。
如果重要,MyMergedDll 是强名称签名的。我正在尝试在控制台应用程序和 Web 服务中使用 MyMergedDll。我不知道每次重建 Web 服务时 IIS 是否都在更新,这是否会使事情变得复杂。使用控制台应用程序,我似乎只BadImageFormatException
在以发布模式构建时才得到。
templates - 托管 C++ 中的非托管 C++ 模板会抛出错误图像?
我有一个托管 C++ dll,它与非托管 C++ dll 动态链接。托管 C++ 从非托管 dll 中的抽象接口派生几个非托管类。
这工作正常。非托管 dll 中的 ICustomer.h
托管 C++ 中的 LocalCustomer.h
LocalCustomer 在托管 dll 中使用。我可以将它传递给非托管 dll 中的函数,并且一切正常。
这是问题所在。当我尝试实现一个公开模板的接口时,我在启动时得到一个 STATUS_INVALID_IMAGE_FORMAT 。
不运行。在非托管 Dll 中
在托管 C++ dll 中
我已经缩小了模板覆盖 GetOrders 的范围。将代码放在托管 dll 中会导致打开一个对话框“应用程序无法正确启动 (0xc000007b),这只是托管加载程序抛出的 STATUS_INVALID_IMAGE_FORMAT HRESULT。删除代码允许它运行。那么模板有什么问题? 为什么我不能在托管的 dll 中使用它。
另一个线索,不确定这是否会分散注意力。我正在编译一个 32 位应用程序并在 Win7 x64 上运行。就像我说的那样,只要模板不跨越 dll 从非托管到托管就可以了。
杀死我的是 II 有几个非托管 C++ 模板,它们完全存在于托管 dll 中,并且工作正常。只是 dll 之间的模板交叉似乎给我带来了不好的形象。
windows-services - GCC编译的.exe的InstallUtill接收System.BadImageFormatException
我正在尝试使用 GCC 编译的 .exe 作为 Windows 中的服务。根据我的研究,我应该这样做:
虽然当我尝试这样做时,我收到这样的消息:
我有一种感觉,这是因为程序是使用 GCC 编译的,并且确实使用了一些 .a 文件进行编译。
从我所看到的System.BadImageFormatException通常是由某种不良清单引起的。有人可以在这里帮助我吗?