BadImageFormatException故障排除

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


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


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


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

使用带有/ verbose选项的peverify以确保程序集二进制文件有效。

使用fuslogvw查找任何加载问题。

使用CheckAsm查找丢失的文件或组件。

所有这些检查都没有改变任何东西。我已经在下面列出了例外信息的全文,其中一些名称已经更改,以保护我公司主人的秘密。


System.BadImageFormatException未处理

  Message =无法加载文件或程序集'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,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null。

===

日志:此绑定在默认加载上下文中启动。

日志:使用应用程序配置文件: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。

错误:无法完成程序集的设置(hr = 0x8007000b)。探测终止。


  堆栈跟踪:

       在XxxDevicesService.Program.Main(String [] args)

       在System.AppDomain._nExecuteAssembly(RuntimeAssembly程序集,String [] args)

       在Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean ignoreSyncCtx)

       在System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback回调,对象状态)

       在System.Threading.ThreadHelper.ThreadStart()

  的InnerException: 


慕斯王
浏览 1360回答 3
3回答

绝地无双

在我不停地敲桌子后想着整个星期,我花了这个问题,我正在分享对我有用的东西。我有Win7 64位,32位Oracle客户端,并且我的MVC 5项目设置为在x86平台上运行,因为Oracle的位数。我一直得到同样的错误:无法加载文件或程序集“Oracle.DataAccess”或其依赖项之一。尝试加载格式不正确的程序。我重新加载了NuGet包,我使用了在不同应用程序中为其他人工作的DLL的副本,我将依赖程序集中的代码库设置为指向我项目的bin文件夹,我尝试将CopyLocal设置为true或false,我尝试了所有内容。最后我做了足够的其他事情,我想检查我的代码,作为一个新的承包商,我没有设置颠覆。在寻找将其挂钩到VS的方法时,我绊倒了答案。我发现的工作是取消选中Tools => Options菜单下的Projects and Solutions => Web Projects部分下的“使用64位版本的IIS Express for Web Sites and Projects”选项。

慕盖茨4494581

当您更改.csproj的目标框架并将其恢复为您的开始时,通常会发生这种情况。在app.config中的启动标记下,确保1如果supportedRuntime version =“与cs项目目标不同的运行时”。确保2这也意味着检查属性文件夹中的其他自动生成或其他文件,以查看这些文件与.csproj文件中定义的文件之间是否没有更多的运行时不匹配。在开始尝试使用项目属性来解决错误之前,这些可能只会节省大量时间。
打开App,查看更多内容
随时随地看视频慕课网APP