我试图在ASP.NET webforms应用程序中使用Ninject 3。我们通过在我们需要的地方创建一个新的注入内核,在没有Ninject.Web扩展的情况下使用它已经有一段时间了。直到现在我才发现这不是正确的做事方式。我写了一个成功使用Ninject.Web的小测试应用程序,但是当我尝试在我们的实际应用程序中做同样的事情时,我在页面加载后立即收到TypeLoadException。它甚至不能进入我可以设置断点的代码。这是异常和堆栈跟踪:
无法加载类型 ' System.Runtime.CompilerServices.ExtensionAttribute'从装配 ' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089'
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.TypeLoadException:无法加载类型 ' System.Runtime.CompilerServices.ExtensionAttribute'从装配 ' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089'
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈追踪:
[TypeLoadException:无法加载类型 ' System.Runtime.CompilerServices.ExtensionAttribute'从装配 ' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089&#39 ;.]
System.ModuleHandle.ResolveType(RuntimeModule模块,Int32 typeToken, IntPtr * typeInstArgs,Int32 typeInstCount,IntPtr * methodInstArgs, Int32 methodInstCount,ObjectHandleOnStack type)+0
System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule模块, Int32 typeToken,RuntimeTypeHandle [] typeInstantiationContext, RuntimeTypeHandle [] methodInstantiationContext)+525
System.ModuleHandle.ResolveTypeHandle(Int32 typeToken, RuntimeTypeHandle [] typeInstantiationContext,RuntimeTypeHandle [] methodInstantiationContext)+19
System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken, 键入[] genericTypeArguments,Type [] genericMethodArguments)+315
System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord,MetadataImport范围,汇编& lastAptcaOkAssembly, RuntimeModule decoratedModule,MetadataToken decoratedToken, RuntimeType attributeFilterType,Boolean mustBeInheritable,Object [] 属性,IList derivedAttributes,RuntimeType&属性类型, IRuntimeMethodInfo&安培; ctor,布尔& ctorHasParameters,Boolean& isVarArg)+208
System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule,Int32 decoratedMetadataToken,Int32 pcaCount, RuntimeType attributeFilterType,Boolean mustBeInheritable,IList derivedAttributes,Boolean isDecoratedTargetSecurityTransparent)+1171 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly assembly,RuntimeType caType)+ 1466 WebActivator.AssemblyExtensions.GetActivationAttributes(大会 装配)+114
WebActivator.ActivationManager.RunActivationMethods()+286
WebActivator.ActivationManager.RunPreStartMethods()+38
WebActivator.ActivationManager.Run()+56[InvalidOperationException:预应用程序启动初始化 方法在WebActivator.ActivationManager类型上运行引发异常 带有以下错误消息:无法加载类型 ' System.Runtime.CompilerServices.ExtensionAttribute'从装配 ' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= 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,Exception appDomainCreationException)+1167[HttpException(0x80004005):预应用程序启动初始化 方法在WebActivator.ActivationManager类型上运行引发异常 带有以下错误消息:无法加载类型 ' System.Runtime.CompilerServices.ExtensionAttribute'从装配 ' mscorlib,版本= 4.0.0.0,文化=中立, 公钥= b77a5c561934e089' ..]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+11556592 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest) wr,HttpContext context)+4813333
我的搜索没有发现任何非常有用的东西,但我探索的主要途径是Ninject构建的.NET版本与我实际运行的版本之间的潜在冲突。我从来没有在我的系统上安装.NET 4.5,所以我确定我建立的是4.0。然后,我构建了最新版本的Ninject(3.0.2)和源代码的扩展,以确保它也使用4.0。我还尝试将我在真实应用中使用的所有库添加到我的测试应用中,看看是否存在冲突,但是没有发现任何问题。 (但是,我还没有提供用于练习它们的代码。我不知道这是否会改变任何内容。)
之前有没有人见过这种问题,或者有什么想法可以试试?我可以提供更多有用的信息吗?
或者,是否有其他方法可以在ASP.NET应用程序中使用Ninject而不是ninject.web扩展名?将Ninject内核包装成单例工作也是如此吗?