Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/windows-phone-7/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity应用程序块:解析时发生异常:BadImageFormatException_Exception_Unity Container_Badimageformatexception - Fatal编程技术网

Unity应用程序块:解析时发生异常:BadImageFormatException

Unity应用程序块:解析时发生异常:BadImageFormatException,exception,unity-container,badimageformatexception,Exception,Unity Container,Badimageformatexception,我在应用程序中使用Unity 2.1,在一个解决方案的标题中收到错误。我不知道去哪里找 我正在运行64位Windows 7 32位应用程序已启用 尝试针对“任何CPU”和“x64”构建 问题似乎与64位体系结构无关。任何帮助都将不胜感激 情景 //works:class=“ProductManager Container.Resolve() //工作:class=“OrderManager” Container.Resolve您拥有的Unity版本是x32。您的项目程序集正在构建为x64,但

我在应用程序中使用Unity 2.1,在一个解决方案的标题中收到错误。我不知道去哪里找

  • 我正在运行64位Windows 7
  • 32位应用程序已启用
  • 尝试针对“任何CPU”和“x64”构建
问题似乎与64位体系结构无关。任何帮助都将不胜感激

情景
//works:class=“ProductManager
Container.Resolve()
//工作:class=“OrderManager”

Container.Resolve您拥有的
Unity
版本是
x32
。您的项目程序集正在构建为
x64
,但有32位Unity程序集作为引用。不幸的是,编译会顺利进行。不过,在运行时您会感到非常意外。底线:使用平台目标
x86
进行编译

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

MSDN注释:

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

要解决此异常,请设置项目的平台目标属性 到x86(而不是x64或任何CPU)并重新编译


更多信息。

请发布已完成的堆栈跟踪BadImageFormatException@Jehof:Added stacktraceUnity随我正在使用的模块一起提供,因此我无法重建它。但是我已启用32位应用程序,因此这不应该是一个问题?那么您应该严格针对
x86
。您将无法编译x64汇编在使用该版本的Unity时。但这以前确实有效。我需要提到的是,可能是我今天早上开始泛化导致错误发生的
OrderManager
类…尝试设置
x86
目标,看看是否有效。我相信在运行时之前不会遇到
BadImageFormatException
,这意味着当对Unity的第一次引用实际强制程序集解析时。这可能直到现在才发生。引用是正确的,但在运行时不会加载。原因是,64位程序集需要64位引用的程序集,而不是32位引用的程序集。这在设计和编译期间不会得到解析-只会成为在运行时,在程序集解析阶段,我将停止添加任何进一步的注释,直到您尝试MSDN的建议。
//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>();
<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" />
public interface IProductManager<TProduct> where TProduct : Product
{
}

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

public class OrderManager : IOrderManager
{
}

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