Ninject ASP.NET扩展抛出TypeLoadException

时间:2013-04-08 18:20:59

标签: asp.net webforms ninject-3

我试图在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内核包装成单例工作也是如此吗?

0 个答案:

没有答案