2012-03-23 40 views
2

我在我的应用程序中使用Unity 2.1,并在一个解决方案的标题中收到错误。我不知道在哪里看。Unity应用程序块:解析时发生异常:BadImageFormatException

  • 我运行Windows 7 64位
  • 32位应用程序启用
  • 反对 “任何CPU” “64” 试图建设

问题没有按似乎与64位架构无关。任何援助将不胜感激!

方案的

//works: class = "ProductManager<Product> 
Container.Resolve<IProductManager<Product>>() 

//works: class = "OrderManager" 
Container.Resolve<IOrderManager() 

//works: class="OrderManager" 
Container.Resolve<IOrderManager("OrderManager") 

//DOESN'T WORK: EXCEPTION: BadImageFormatException 
Container.Resolve<IOrderManager("OrderManager") 

//works: class="GenericOrderManager<Order>" (obviously) 
var manager = new GenericOrderManager<Order>(); 

代码

Unity.config

<alias name="IProductManager" type="Assembly1.Namespace.IProductManager`1" /> 
<alias name="ProductManager" type="Assembly2.Namespace.ProductManager`1" /> 

<alias name="IOrderManager" type="Assembly1.Namespace.IOrderManager" /> 
<alias name="OrderManager" 
     type="Assembly1.Namespace.OrderManager" /> 
<alias name="OrderManager" 
     type="Assembly1.Namespace.OrderManager" 
     name="OrderManager" /> 
<alias name="GenericOrderManager" 
     type="Assembly2.Namespace.GenericOrderManager`1" 
     name="GenericOrderManager" /> 

ProductManager +接口

public interface IProductManager<TProduct> where TProduct : Product 
{ 
} 

public class ProductManager<TProduct> : IProductManager<TProduct> where TProduct : Product 
{ 
} 

的OrderManager +接口

public interface IOrderManager 
{ 
} 

public class OrderManager : IOrderManager 
{ 
} 

public class OrderManager<TOrder> : OrderManager where TOrder : Order 
{ 
} 

更新与堆栈跟踪:

在在System.Reflection.Emit System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo 方法)。 DynamicMethod.CreateDelegate(类型 委托类型)在 Microsoft.Practices.ObjectBuilder2.DynamicBuildPlan GenerationContext.GetBuildMethod() 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan在 Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext 上下文)(IBuilderContext 上下文,NamedTypeBuildKey buildKey)在 Microsoft.Practices.ObjectBuilder2.StrategyChain .ExecuteBuildUp(IBuilderContext 上下文)在Microsoft.Practices.Unity.UnityContainer.DoBuildUp(类型 T,物体存在,字符串名称,IEnumerable`1 resolverOverrides)

+0

请发布已完成的BadImageFormatException的StackTrace – Jehof 2012-03-23 13:40:11

+0

@Jehof:增加了stacktrace – ReFocus 2012-03-23 13:51:21

回答

2

Unity版本必须是x32 。您的项目程序集正在构建为x64,但具有32位Unity程序集作为参考。不幸的是,编译会很顺利。不过,你会在运行时遇到令人讨厌的惊喜。底线:编译平台目标为x86

调用32位程序集的64位程序集是BadImageFormatException最常见的原因之一。

MSDN注意到:

一个DLL或可执行加载为64位的组件,但它包含 32位功能或资源。例如,它依靠COM互操作或调用32位动态链接库中的方法。

要解决此异常,请将项目的Platform目标属性 设置为x86(而不是x64或AnyCPU)并重新编译。

更多信息here

+0

Unity提供了我正在使用的模块,因此我无法重建它。但是,我有32位应用程序启用,所以不应该是一个问题? – ReFocus 2012-03-23 14:01:24

+0

那么你应该严格的目标'x86'。在使用该版本的Unity时,您将无法编译x64程序集。 – code4life 2012-03-23 14:04:13

+0

但这确实工作过。我需要提一下,也许我今天早上开始推广'OrderManager'类,这会导致错误发生...... – ReFocus 2012-03-23 14:15:11

相关问题