【发布时间】:2012-02-18 06:42:18
【问题描述】:
我有一个使用 Visual Studio 2010 用 C# 编写的 Windows 服务,目标是完整的 .NET Framework 4。当我从 Debug 版本运行时,该服务按预期运行。但是,当我从 Release 版本运行它时,我得到一个 System.BadImageFormatException(详情如下)。我一直在互联网上寻找解决方案,但到目前为止,我发现的所有东西都没有帮助我找到解决方案。
Windows 7 64 位(开发)和 Windows XP SP3 32 位(目标)系统都存在此问题。
这是我迄今为止尝试过的:
- 平台目标等经过验证的构建设置都相同 (x86)。
- 将 peverify 与 /verbose 选项一起使用以确保程序集二进制文件有效。
- 使用 fuslogvw 查找任何加载问题。
- 使用 CheckAsm 查找丢失的文件或程序集。
所有这些检查都没有改变任何东西。我已经在下面包含了异常信息的全文,其中一些名称已更改以保护我的公司主人的秘密。
System.BadImageFormatException 未处理 消息=无法加载文件或程序集“XxxDevices,版本=1.0.0.0,文化=中性,PublicKeyToken=null”或其依赖项之一。试图加载格式不正确的程序。 来源=XxxDevicesService 文件名=XxxDevices,版本=1.0.0.0,文化=中性,PublicKeyToken=null FusionLog=Assembly manager 加载自:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll 在可执行文件 c:\Dev\TeamE\bin\Release\XxxDevicesService.vshost.exe 下运行 --- 详细的错误日志如下。 === 预绑定状态信息 === 日志:用户 = XXX 日志:DisplayName = XxxDevices,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null (完全指定) 日志:Appbase = file:///c:/Dev/TeamE/bin/Release/ 日志:初始 PrivatePath = NULL 调用程序集:XxxDevicesService,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null。 === LOG:此绑定在默认加载上下文中开始。 LOG:使用应用程序配置文件:c:\TeamE\bin\Release\XxxDevicesService.vshost.exe.Config LOG:使用主机配置文件: LOG:使用 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config 中的机器配置文件。 LOG:此时未将策略应用于引用(私有、自定义、部分或基于位置的程序集绑定)。 日志:正在尝试下载新的 URL 文件:///c:/TeamE/bin/Release/XxxDevices.DLL。 ERR:无法完成程序集的设置(hr = 0x8007000b)。探测终止。 堆栈跟踪: 在 XxxDevicesService.Program.Main(String[] args) 在 System.AppDomain._nExecuteAssembly(RuntimeAssembly 程序集,字符串 [] 参数) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔 ignoreSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart() 内部异常:【问题讨论】:
-
你是在混合原生代码/.net吗?
-
您在正确的轨道上,此异常与 x86/x64 位差异相关。我认为这不是一个网络应用程序,对吧?另外,
XxxDevicesService是什么类型的程序集?它是为特定平台编译的(例如 32 位)吗?如果是这样,那么您必须将您的平台编译为 32 位。