System.BadImageFormatException - 无法解决它

时间:2010-02-09 13:34:21

标签: visual-studio 64-bit visual-studio-2010-beta-2

我正在使用在Windows 7 X64中运行的Visual Studio 2010 我试图创建一个简单的双工通信WCF实现。 可悲的是,我很快陷入困境。

我有3个项目: - 具有简单服务合同和实施的服务库 - ServiceHost:通过SelfHosting托管服务库 - 客户端:使用WCF服务中的方法

我立即注意到服务库将Any CPU作为平台。另外两个以x86为平台。 在这一点上,我不知道我会得到这个错误,所以这并没有真正打扰我。

然后我使用内置的wcfsvchost.exe启动了服务库。托管服务没有问题。 然后我想通过我自己的主机托管我的服务。在这里,我第一次体验到System.BadImageFormatException。我不知道那时是什么。 所以我被困住并做了一些谷歌搜索。如果我理解正确,所有dll等的平台需要相同。如果有人能更好地解释我请做。

无论如何,我会改变服务库的平台,因为它有任何CPU而不是x86。所以我尝试通过Project设置和配置管理器来完成。但问题是我无法改变它。然后我卸载了项目,看看另一个.csproj看起来像是什么并改变了那里的值。重装上阵,一切都很好。现在它有了正确的平台x86。好的,让我们测试运行服务库.. BOOM System.BadImageFormatException

System.BadImageFormatException:无法加载文件或程序集'file:/// C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll'或其中一个依赖。尝试加载格式不正确的程序。 文件名:'file:/// C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll'    在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark& stackMark,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)    在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence assemblySecurity,StackCrawlMark& stackMark,Boolean forIntrospection,Boolean suppressSecurityChecks)    在System.Reflection.Assembly.Load(AssemblyName assemblyRef)    在Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

===预绑定状态信息=== 日志:用户= Sven-PC \ Sven 日志:Where-ref绑定。 Location = C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll 日志:Appbase = file:/// C:/ Users / Sven / documents / visual studio 2010 / Projects / DuplexDemo / CustomerService2 / bin / Debug 日志:初始PrivatePath = NULL

调用程序集:(未知)。

日志:此绑定从LoadFrom加载上下文开始。 警告:不会在LoadFrom上下文中探测本机映像。原生图像只能在默认加载上下文中进行探测,就像使用Assembly.Load()一样。 日志:使用应用程序配置文件:C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll.config 日志:使用主机配置文件: 日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.21006 \ config \ machine.config中的计算机配置文件。 日志:尝试下载新的URL文件:/// C:/ Users / Sven / documents / visual studio 2010 / Projects / DuplexDemo / CustomerService2 / bin / Debug / CustomerService2.dll。 错误:无法完成程序集的设置(hr = 0x8007000b)。探测终止。

所以现在我已经改变了平台,服务库就不再运行了。所以现在我被困住了,我寻求一些解决方案。

谁能告诉我发生了什么事? 不要认为代码有错误,因为它是普通的WCF并且在它工作之前。在x32 setup

中创建时,代码也可以正常工作

请帮帮我

1 个答案:

答案 0 :(得分:3)

这可能是在黑暗中非常长镜头,但你能以32位模式运行应用程序池吗?

我猜你不想这样做,因为好像你一直在看这个问题一段时间了?

我修复类似问题的方法是逐个浏览我使用过的库,直到找到了与64位不兼容的违规3方库。

最诚挚的问候 Rihan