GVKun编程网logo

对BadImageFormatException进行故障排除

14

在本文中,我们将给您介绍关于对BadImageFormatException进行故障排除的详细内容,此外,我们还将为您提供关于.Net5中的ObjectDataProvider抛出System.Bad

在本文中,我们将给您介绍关于对BadImageFormatException进行故障排除的详细内容,此外,我们还将为您提供关于.Net 5 中的 ObjectDataProvider 抛出 System.BadImageFormatException、.net – CorFlags.exe,System.Data.SQLite.dll和BadImageFormatException、.net – 什么原因导致System.BadImageFormatException时构造System.Data.SQLite.SQLiteConnection、.net – 尝试加载Oracle客户端库引发了BadImageFormatException的知识。

本文目录一览:

对BadImageFormatException进行故障排除

对BadImageFormatException进行故障排除

我有一个使用Visual Studio 2010 C#编写的Windows服务,目标是完整的.NET
Framework4。从Debug版本运行时,该服务将按预期运行。但是,当我从Release版本运行它时,我得到了System.BadImageFormatException(详细信息如下)。我一直在互联网上寻找解决方案,但到目前为止,我发现的每一件事都没有帮助我找到解决方案。

Windows 7 64位(dev)和Windows XP SP3 32位(目标)系统上都存在此问题。

到目前为止,这是我尝试过的:

  • 经过验证的构建设置(例如Platform Target)都相同(x86)。
  • 使用带有/ verbose选项的peverify来确保程序集二进制文件有效。
  • 使用fuslogvw查找任何加载问题。
  • 使用CheckAsm查找丢失的文件或组件。

所有这些检查都没有改变任何东西。我在下面提供了异常信息的全文,其中一些名称已更改,以保护公司负责人的秘密。

System.BadImageFormatException未处理  消息=无法加载文件或程序集''XxxDevices,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null''或其依赖项之一。试图加载格式错误的程序。  源= XxxDevicesService  FileName = XxxDevices,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null  FusionLog =程序集管理器从以下位置加载:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ clr.dll在可执行文件c:\ Dev \ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe下运行---详细的错误日志如下。===预绑定状态信息===日志:用户= XXX日志:DisplayName = XxxDevices,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null (完全指定)日志:Appbase = file:/// c:/ Dev / TeamE / bin / Release /日志:初始PrivatePath = NULL调用程序集:XxxDevicesService,版本= 1.0.0.0,文化=中性,PublicKeyToken =空。===日志:此绑定在默认的加载上下文中启动。日志:使用应用程序配置文件:c:\ TeamE \ bin \ Release \ XxxDevicesService.vshost.exe.Config日志:使用主机配置文件: 日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config中的计算机配置文件。日志:目前未将策略应用于引用(私有,自定义,部分或基于位置的程序集绑定)。日志:尝试下载新的URL文件:/// c:/TeamE/bin/Release/XxxDevices.DLL。ERR:无法完成装配的设置(hr = 0x8007000b)。探测终止。  堆栈跟踪:       在XxxDevicesService.Program.Main(String [] args)       在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String []参数)       在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()       在System.Threading.ExecutionContext.Run(ExecutionContext执行上下文,ContextCallback回调,对象状态,布尔ignoreSyncCtx)       在System.Threading.ExecutionContext.Run(ExecutionContext执行上下文,ContextCallback回调,对象状态)       在System.Threading.ThreadHelper.ThreadStart()  InnerException:

答案1

小编典典

经过验证的构建设置(例如Platform Target)都相同(x86)。

崩溃日志不是这样写的:

程序集管理器从以下位置加载:C:\ Windows \ Microsoft.NET \ Framework64

Note the 64 in the name, that’s the home of the 64-bit version of the
framework. Set the Target platform setting on your EXE project, not your
class library project. The XxxDevicesService EXE project determines the
bitness of the process.

.Net 5 中的 ObjectDataProvider 抛出 System.BadImageFormatException

.Net 5 中的 ObjectDataProvider 抛出 System.BadImageFormatException

如何解决.Net 5 中的 ObjectDataProvider 抛出 System.BadImageFormatException?

我正在尝试在 ObjectDataProvider 网络应用程序中使用 .Net-5。因此我需要使用 System.Windows.Data,它可以与 PresentationFramework.dll 一起使用。我将程序集包含在 NuGet (<packagereference Include="PresentationFramework" Version="4.6.0" />) 中。当我构建我的应用程序时,我已经收到以下警告:

warning NU1701: Package ''PresentationFramework 4.6.0'' was restored using ''.NETFramework,Version=v4.6.1,.NETFramework,Version=v4.6.2,Version=v4.7,Version=v4.7.1,Version=v4.7.2,Version=v4.8'' instead of the project target framework ''net5.0''. This package may not be fully compatible with your project.

然后,当我尝试使用 ObjectDataProvider 创建一个 ObjectDataProvider myODP = new ObjectDataProvider(); 对象时,我的应用程序崩溃了:

System.BadImageFormatException: Could not load file or assembly ''PresentationFramework,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35''. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (0x80131058)
      File name: ''PresentationFramework,PublicKeyToken=31bf3856ad364e35'' ---> System.BadImageFormatException: Cannot load a reference assembly for execution.

如果感兴趣,我正在 x64 系统上的 Linux docker 容器 (mcr.microsoft.com/dotnet/sdk:5.0-focal) 中运行我的应用程序。

从我的 Google 搜索中,我已经尝试删除 bin 文件夹并重新构建,但没有成功。
其他答案似乎表明 System.BadImageFormatException 表示引用了 x86 程序集,而我正在为 x64 构建。除了来自 NuGet 的版本,我似乎找不到任何其他版本的 PresentationFramework.dll
还是 ObjectDataProvider 只是 deprecated?

我的问题是:如何解决此问题并使 ObjectDataProvider.Net-5 中工作?
甚至可以在 PresentationFramework.dll 中使用 .Net-5 吗?
顺便说一句,我也尝试让它在 .Net-3.1 中工作,但也出现了同样的问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

.net – CorFlags.exe,System.Data.SQLite.dll和BadImageFormatException

.net – CorFlags.exe,System.Data.SQLite.dll和BadImageFormatException

从 http://sqlite.phxsoftware.com/对System.Data.sqlite.dll运行 CorFlags.exe会产生以下输出.

Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 24
ILONLY    : 0
32BIT     : 0
Signed    : 1

如您所见,未指定32BIT且PE等于PE32.根据Moving from 32-bit to 64-bit application development on .NET Framework,这意味着该组件是任何cpu.但是,使用64位应用程序中的程序集会导致错误:

System.BadImageFormatException: Could
not load file or assembly
‘System.Data.sqlite’ or one of its
dependencies. An attempt was made to
load a program with an incorrect
format. File name:
‘System.Data.sqlite’

如果CorFlags.exe报告任何cpu,为什么会发生异常?组件是否错误标记为32BIT:0?

我知道有一个64位版本也可用,我只是想知道导致错误的原因.

解决方法

您使用的System.Data.sqlite.dll文件是 mixed-mode assembly,这意味着它不是纯.NET代码(另请参阅“ILONLY:0”标志),它还包含非托管机器代码,不能是“任何”中央处理器”.因此,由于DLL包含32位本机代码,因此只能将其加载到32位进程中,否则会发生BadImageFormatException.

.net – 什么原因导致System.BadImageFormatException时构造System.Data.SQLite.SQLiteConnection

.net – 什么原因导致System.BadImageFormatException时构造System.Data.SQLite.SQLiteConnection

我已经破碎代码到尽可能小的语句:
Dim cn As System.Data.sqlite.sqliteConnection

当从WinForm应用程序调用代码时,我得到以下错误:

System.BadImageFormatException: Could
not load file or assembly
‘System.Data.sqlite,Version=1.0.65.0,
Culture=neutral,
PublicKeyToken=db937bc2d44ff139’ or
one of its dependencies. An attempt
was made to load a program with an
incorrect format. File name:
‘System.Data.sqlite,
PublicKeyToken=db937bc2d44ff139’

然而从MS单元测试I调用同一段代码没有得到错误,加上完整的代码集工作原理。

sqlLite包含非托管代码,您不能在64位操作系统上运行它,除非部署64位版本。快速修复:项目属性,构建选项卡,平台目标= x86。

.net – 尝试加载Oracle客户端库引发了BadImageFormatException

.net – 尝试加载Oracle客户端库引发了BadImageFormatException

尝试从.net连接到oracle数据库时遇到以下异常:

尝试加载Oracle客户端库会引发BadImageFormatException.在安装了32位Oracle客户端组件的64位模式下运行时,将发生此问题.

在经历了许多链接后,我试图通过将平台目标更改为任何cpu来克服此异常.因为它是wpf应用程序,在更改平台目标后,它会抛出以下异常:

‘对指定绑定约束匹配的类型’SSC_GIP_UI.MainWindow’上的构造函数的调用引发了异常.行号“3”和行位置“9”.

但它运行平台目标x86没有抛出上述异常,但它抛出BadImageFormatException.

我工作的环境是:
Windows服务器2008,
.net framework 4.0,
oracle 11g(64位)

谁能告诉我怎么解决?

此错误表示应用程序中的32位和64位组件之间存在不匹配.

当您在64位Windows中运行应用程序时,它可以作为64位或32位运行.如果已将平台目标设置为x86,则它将以32位运行.如果您将平台目标设置为x64或Anycpu,它将以64位运行.

Oracle有不同版本的客户端,一个是32位,另一个是64位.因此,如果您的应用程序以32位模式运行,则需要确保安装了32位Oracle客户端.

关于对BadImageFormatException进行故障排除的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于.Net 5 中的 ObjectDataProvider 抛出 System.BadImageFormatException、.net – CorFlags.exe,System.Data.SQLite.dll和BadImageFormatException、.net – 什么原因导致System.BadImageFormatException时构造System.Data.SQLite.SQLiteConnection、.net – 尝试加载Oracle客户端库引发了BadImageFormatException等相关内容,可以在本站寻找。

本文标签: