Ninject ASP.NET расширение, выбрасывающее исключение TypeLoadException
Я пытаюсь использовать Ninject 3 в приложении веб-форм ASP.NET. Некоторое время мы использовали его без расширения Ninject.Web, создавая новое ядро для инъекций везде, где оно было нужно. До сих пор мне не приходило в голову, что это неправильный способ делать вещи. Я написал небольшое тестовое приложение, которое успешно использует Ninject.Web, но когда я попытался сделать то же самое в нашем реальном приложении, я получаю исключение TypeLoadException, как только страница загружается. Это даже не входит в мой код, где я могу установить точку останова. Вот исключение и трассировка стека:
Не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' из сборки 'mscorlib, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089'.
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.TypeLoadException: не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' из сборки 'mscorlib, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089'.
Ошибка источника:
Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местоположении исключения может быть идентифицирована с помощью трассировки стека исключений ниже.
Трассировки стека:
[TypeLoadException: не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' из сборки 'mscorlib, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089'.]
System.ModuleHandle.ResolveType (модуль RuntimeModule, Int32 typeToken, IntPtr* typeInstArgs, Int32 typeInstCount, IntPtr* methodInstArgs, Int32 methodInstCount, тип ObjectHandleOnStack) +0
System.ModuleHandle.ResolveTypeHandleInternal (модуль RuntimeModule, тип Int32Token, RuntimeTypeHandle [] typeInstantiationContext, RuntimeTypeHandle [] methodInstantiationContext) +525
System.ModuleHandle.ResolveTypeHandle (Int32 typeToken, RuntimeTypeHandle [] typeInstantiationContext, RuntimeTypeHandle [] methodInstantiationContext) +19
System.Reflection.RuntimeModule.ResolveType (Int32 metadataToken, Type [] genericTypeArguments, Type [] genericMethodArguments) +315
System.Reflection.CustomAttribute.FilterCustomAttributeRecord (CustomAttributeRecord caRecord, MetadataImport сфера, сборка и lastAptcaOkAssembly, RuntimeModule decoratedModule, MetadataToken decoratedToken, RuntimeType attributeFilterType, булева mustBeInheritable, Object[] атрибуты, IList derivedAttributes, RuntimeType& AttributeType, IRuntimeMethodInfo& CTOR, булевы & ctorHasParameters, булевы & isVarArg) + 208
System.Reflection.
WebActivator.AssemblyExtensions.GetActivationAttributes(сборка сборки) +114
WebActivator.ActivationManager.RunActivationMethods () +286
WebActivator.ActivationManager.RunPreStartMethods () +38
WebActivator.ActivationManager.Run () +56[InvalidOperationException: метод инициализации запуска перед приложением Выполнить по типу WebActivator.ActivationManager вызвал исключительную ситуацию со следующим сообщением об ошибке: Не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' из сборки 'mscorlib, Version=4.0.0.0, Culture= нейтральный, PublicKeyToken = b77a5c561934e089 '..]
System.Web.Compilation.BuildManager.InvokePreStartInitMethods (методы ICollection`1) +11567502
System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465
System.Web.Hosting.HostingEnvironment.Initialize (ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Исключение appDomainCreationException) +1167[HttpException (0x80004005): Метод инициализации запуска перед приложением Запуск по типу WebActivator.ActivationManager вызвал исключительную ситуацию со следующим сообщением об ошибке: Не удалось загрузить тип 'System.Runtime.CompilerServices.ExtensionAttribute' from Assembly 'mscorlib, Version=4.0.0.0, Культура = нейтральный, PublicKeyToken = b77a5c561934e089 '..]
System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +11556592 System.Web.HttpRuntime.EnsureFirstRequestInit(контекст HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivert, HQWTWWWTWWWTWWWWWRWTWTWRWTWRWTWRWTWWWWWW.Ru.WIS7 (IIS)
Ни один из моих поисков не дал ничего страшного, но основной путь, который я исследовал, - это потенциальный конфликт между версией.NET, на которой была построена Ninject, и версией, которую я фактически использую. Я никогда не устанавливал.NET 4.5 в своей системе, поэтому я уверен, что я собираюсь использовать 4.0. Затем я собрал самую последнюю версию Ninject (3.0.2) и расширения из исходного кода, чтобы быть уверенным, что он также использует 4.0. Я также попытался добавить все библиотеки, которые я использую в реальном приложении, в мое тестовое приложение, чтобы увидеть, есть ли конфликт, но это ничего не выявляет. (Однако я не зашел так далеко, чтобы вставить код, который их тренирует. Я не знаю, изменит ли это что-нибудь.)
Кто-нибудь видел подобные проблемы раньше или есть идеи, которые я могу попробовать? Могу ли я предоставить дополнительную информацию, которая будет полезна?
В качестве альтернативы, есть ли другой способ использовать Ninject в приложении ASP.NET вместо расширения ninject.web? Будет ли так же хорошо работать ядро Ninject в синглтоне?