【发布时间】:2010-02-09 13:34:20
【问题描述】:
我正在使用 Visual Studio 2010,在 Windows 7 X64 中运行 我试图创建一个简单的双工通信 WCF 实现。 不幸的是,我很快就被卡住了。
我有 3 个项目: - 具有简单服务契约和实现的服务库 - ServiceHost:通过 SelfHosting 托管服务库 - 客户端:使用 WCF 服务中的方法
我立即注意到 Service 库有 Any CPU as platform 。另外两个以 x86 作为平台。 在这一点上,我不知道我会收到这个错误,所以这并没有真正困扰我。
然后我使用内置的 wcfsvchost.exe 启动服务库。服务托管没有问题。 然后我想通过我自己的主机托管我的服务。在这里,我第一次体验了 System.BadImageFormatException。那时我不知道那是什么。 所以我被卡住了,做了一些谷歌搜索。如果我理解正确,所有 dll 等的平台需要相同。如果有人可以更好地解释我。请做。
无论如何,我会更改服务库的平台,因为它具有 Any CPU 而不是 x86。所以我尝试通过项目设置和配置管理器来做到这一点。但问题是我没有选择改变它。然后我卸载了项目,查看了其他 .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 文件名,字符串代码库,证据 assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark 和 stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection,布尔suppressSecurityChecks) 在 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark 和 stackMark,Boolean for Introspection,Boolean suppressSecurityChecks) 在 System.Reflection.Assembly.Load(AssemblyName assemblyRef) 在 Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)
=== 预绑定状态信息 === 日志:用户 = Sven-PC\Sven LOG:where-ref 绑定。位置 = 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
调用程序集:(未知)。
LOG:此绑定在 LoadFrom 加载上下文中开始。 警告:将不会在 LoadFrom 上下文中探测本机图像。本机映像只会在默认加载上下文中进行探测,例如使用 Assembly.Load()。 日志:使用应用程序配置文件:C:\Users\Sven\documents\visual studio 2010\Projects\DuplexDemo\CustomerService2\bin\Debug\CustomerService2.dll.config 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 设置中创建时也可以工作
请帮帮我
【问题讨论】:
-
你找到解决这个问题的方法了吗?
标签: visual-studio 64-bit visual-studio-2010