2015-06-24 3 views
0

У меня есть такой код (Это часть модульных тестов, выполненные NUnit-консоль):Autofac не могут разрешить зависимость от TeamCity

class MyClass 
{ 
    [DI(Type = typeof(MyClass))] 
    public IMyClass MyClassProperty {get;set;} 
} 

При отражении я сканирование таких классов, а затем регистрирует в Autofac :

// Register MyClass as IMyClass 
autofacBuilder.RegisterType(diAttribute.Type).As(propertyInfo.PropertyType); 

После этого мне нужно решить эту недвижимость таким же образом - путем отражения:

autofacContainer.Resolve(propertyInfo.PropertyType) // it contains IMyClass 

Когда я запуская этот код, он работает хорошо. Но не работает на TeamCity. Ошибки с ошибкой:

Error: 'Autofac.Core.DependencyResolutionException: An exception was thrown while executing a resolve operation. See the InnerException for details. ---> Common Language Runtime detected an invalid program. (See inner exception for details.) ---> System.InvalidProgramException: Common Language Runtime detected an invalid program. 

ответ

1

Есть много вопросов о StackOverflow об этом исключении. Это не проблема Autofac, это проблема компилятора JIT. Быстрый поиск Google по исключению дает много информации.

Вы даже можете увидеть projects like NewtonSoft.Json running into the issue.

exception itself means «программа содержит недопустимый промежуточный язык Microsoft (MSIL) или метаданные, как правило, это указывает на ошибку в компиляторе, который сгенерировал программу».

Microsoft has a KB article on troubleshooting the issue. Всякий раз, когда люди решили его, насколько я видел, это всегда один из двух исправлений:

  • Изменение в опции компиляции. Например, некоторые люди, использующие методы шифрования/обфускации, которые помогают найти их, помогают; другие считают, что отключение оптимизации компилятора исправляет это. (В статье KB есть несколько советов.)
  • Убедившись, что все исправлено до последних версий. Я столкнулся с другими подобными ситуациями, когда все работает отлично на моей машине, но не на сервере сборки; или наоборот. Почти всегда это связано с тем, что у меня есть моя машина, все исправлены, но сервер сборки томится, не загружается; или кто-то просто закрепил сервер сборки, и я еще не установил свои патчи.

Я бы рекомендовал начать с патчей, поскольку это обычно самое простое исправление. Используйте Центр обновления Windows, чтобы убедиться, что вы и сервер сборки имеют последние обновления .NET. Если это не исправить, ознакомьтесь с некоторыми советами по устранению неполадок в приведенных выше статьях и вопросах.

+0

пытался отключить оптимизацию без везения – deeptowncitizen

+0

Извините. Как я уже сказал, есть несколько вещей, которые могут вызвать проблему. Нет никакого «способа», чтобы исправить это. –

Смежные вопросы