我有一个使用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:
XxxDevicesService
?是否针对特定平台(例如32位)进行编译?如果是这样,则必须将平台编译为32位。