Блок приложения Unity: при разрешении возникла исключительная ситуация: BadImageFormatException - PullRequest
2 голосов
/ 23 марта 2012

Я использую Unity 2.1 в своем приложении и получаю ошибку в заголовке для одного разрешающего сценария.Я понятия не имею, где искать.

  • Я использую Windows 7 64-битные
  • 32-битные приложения включены
  • Пробовалпостроение против "любого процессора" и"x64"

Кажется, проблема не связана с 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
{
}

Обновление с помощью StackTrace:

в System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod (метод IRuntimeMethodInfo) в System.Reflection.Emit.DynamicMethod.CreateDelegate (Тип делегатType) в Microsoft.Practices.ObjectBetGhoDBileBuinteUuD2..ObjectBuilder2.DynamicMethodBuildPlanCreatorPolicy.CreatePlan (IBuilderContext контекст, NamedTypeBuildKey buildKey) при Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp (IBuilderContext контексте) при Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp (IBuilderContext контексте) при Microsoft.Practices.Unity.UnityContainer.DoBuildUp (Тип t, Объект существует, Строковое имя, IEnumerable`1 resolverOverrides)

1 Ответ

2 голосов
/ 23 марта 2012

У вас есть Unity версия x32.Сборки вашего проекта создаются как x64, но в качестве ссылок используются 32-разрядные сборки Unity.К сожалению, компиляция пройдет нормально.Тем не менее, вы получите неприятный сюрприз во время выполнения.Итог: компиляция с целью платформы x86.

64-битных сборок, вызывающих 32-битные сборки, является одной из наиболее распространенных причин для BadImageFormatException.

Примечания MSDN:

DLL или исполняемый файл загружается как 64-разрядная сборка, но содержит 32-разрядные функции или ресурсы.Например, он полагается на COM-взаимодействие или вызывает методы в 32-разрядной динамической библиотеке ссылок.

Чтобы устранить это исключение, задайте для целевого свойства Platform проекта значение x86 (вместо x64 или AnyCPU) и перекомпилируйте.

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...