好的,我正在使用 WCF 构建客户端服务器应用程序,NetTcpBinding 由 WinForms 应用程序托管和使用。我在 Windows 7 Ultimate x64 中使用 VS.2012 Ultimate。
我可以启动托管服务的winform,我可以启动服务。现在,在客户端,我启动客户端应用程序并立即得到一个 Microsoft WCF 服务主机窗口,告诉我:
System.BadImageFormatException. Could not load file or assembly X.Services.dll ... an
attempt was made to load a program with an incorrect format.
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
at Microsoft.Tools.SvcHost.ServiceHostHelper.LoadServiceAssembly(String svcAssemblyPath)
现在,客户端和服务器 WinForm 项目都有对定义服务(接口和实现类)的 X.Services.dll 的引用。那么,为什么服务器不抱怨呢?
此外,我已确保此解决方案中的所有项目都将其调试和发布配置设置为相同的 .NET Framework (4.5) 和相同的目标平台(x86 而不是任何 CPU)。
此外,唯一的外部程序集引用(实用程序库 DLL)也是使用相同的 VS 版本构建的,用于相同的框架 (4.5) 和相同的平台 (x86)。
那么这种糟糕的图像格式是从哪里来的呢?该解决方案有自己的外部库副本(以确保它具有正确的平台和框架配置)并且项目文件已被修改,以便它采用相应的发布/调试版本的外部程序集。
根据异常的提示,我使用 regedit 在 HKLM 中添加一个键以启用程序集加载/绑定日志记录并获得以下额外信息:
=== Pre-bind state information ===
LOG: User = DOMAIN\Username
LOG: Where-ref bind. Location = D:\Sources\My.Net\Code\T\X.Services\bin\Debug\X.Services.dll
LOG: Appbase = file:///D:\Sources\My.Net\Code\T\X.Services\bin\Debug\X.Services/bin/Debug
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This bind starts in LoadFrom load context.
WRN: Native image will not be probed in LoadFrom context. Native image will only be probed in default load context, like with Assembly.Load().
LOG: Using application configuration file: D:\Sources\My.Net\Code\T\X.Services\bin\Debug\X.Services.dll.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Attempting download of new URL file:///D:\Sources\My.Net\Code\T\X.Services\bin\Debug\X.Services.dll.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
这对我来说没有任何用处...