2010-02-09 37 views
3

我正在使用Visual Studio 2010,在Windows 7中运行X64 我试图创建一个简单的WCF实现双工通信。可悲的是我很快就卡住了。System.BadImageFormatException - 无法解决它

我有3个项目: - 服务库,简单的服务合同,并实施 - ServiceHost的:通过SelfHosting 托管服务库 - 客户端:消费从WCF服务的方法

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

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

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

System.BadImageFormatException:无法加载文件或程序集'file:/// C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll“或其某个依赖关系。试图加载格式不正确的程序。 在System.Reflection.RuntimeAssembly._nLoad(AssemblyName文件名,文件名称:C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll' 串的代码库,证据assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark & stackMark,布尔throwOnFileNotFound,布尔forIntrospection,布尔suppressSecurityChecks) 在System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(的AssemblyName assemblyRef,证据assemblySecurity,StackCrawlMark & stackMark,布尔forIntrospection,布尔suppressSecurityChecks) 在System.Reflection.Assembly.Load(AssemblyName assemblyRef) at Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)

===预绑定状态信息=== LOG:用户=斯文-PC \斯文 LOG:其中-REF绑定。位置= C:\用户\斯文\文档\ Visual Studio 2010的\项目\ DuplexDemo \ CustomerService2 \ BIN \调试\ CustomerService2.dll LOG:应用平台=文件:/// C:/用户/埃里克森/文档/ Visual Studio 2010中/ Projects/DuplexDemo/CustomerService2/bin/Debug LOG:初始私有路径= NULL

调用程序集:(未知)。

LOG:此绑定在LoadFrom加载上下文中开始。 WRN:在LoadFrom上下文中不会探测本地图像。本机图像只会在默认加载上下文中进行探测,就像使用Assembly.Load()一样。 LOG:使用应用程序配置文件:C:\ Users \ Sven \ documents \ visual studio 2010 \ Projects \ DuplexDemo \ CustomerService2 \ bin \ Debug \ CustomerService2.dll.config LOG:使用主机配置文件: LOG:使用机器配置文件从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。 ERR:无法完成程序集的设置(hr = 0x8007000b)。探测终止。

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

谁能告诉我发生了什么事? 不要认为代码有错误,因为它是纯粹的香草WCF和之前工作。在X32安装时创建

请帮我

+0

你找到一个解决这个问题? – newman 2011-11-29 02:11:49

回答

3

这也许是在黑暗中一个非常长镜头中的代码也在努力,但你能运行在32位模式的应用程序池?

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

我修正了一个类似问题的方法是逐个浏览我用过的库,直到找到不兼容的64位兼容库。

问候 Rihan