【发布时间】:2015-06-23 19:34:27
【问题描述】:
我们的软件有一个服务器组件,它公开了几个 WCF 端点。为了给我们的用户一个“培训”模式,我们创建了一个动态 DLL,它在我们的每个服务接口中包装了调用。然后将此动态生成的 DLL 加载到单独的应用程序域中。然后,客户端应用程序可以在“训练”模式和“正常”模式之间切换,这会影响客户端用于通信的端点。
我遇到的问题是,我从在子应用程序域中运行的动态生成的 DLL 中获得了 BadImageFormatException。当我引用了我工作的公司中另一个团队制作的一些 DLL 时,这个问题就开始了,这向我表明它是导致问题的依赖 DLL 之一。我已经确保两个解决方案中的每个项目都是使用 x86 标志构建的。有些 DLL 是 .NET 2.0,有些是 .NET 4.0,但应用程序本身在 .NET 4.0 CLR 下运行(它在 App.Config 文件中设置),因此 .NET 2.0 DLL 没有问题。我感到困惑的是,所有引用的程序集都由在父应用程序域中运行的父可执行文件加载而没有问题,但是一旦在子应用程序域中运行的生成的 DLL 尝试加载相同的程序集,我们就会得到 BadImageFormatException。
对于如何准确追踪导致问题的 DLL 的任何建议,我将不胜感激(因为 Fusion 日志记录似乎没有给我任何信息)。我是否需要设置标志以确保动态 DLL 和子应用程序域是 32 位和 .NET 4?任何其他建议或 cmets 将不胜感激。
谢谢大家! 安德鲁·S
【问题讨论】:
-
如果您确定一切都是 x86,是否有任何相关的 DLL 与相关的 DLL 相关,这可能会丢失。对于依赖项,会出现这个错误而不是 DllNotFoundException,这使得它非常混乱。