【发布时间】:2017-09-12 12:53:03
【问题描述】:
我有一个工作 webapi2 应用程序,其中引用了我们拥有的一些公共/共享库程序集。这些共享库具有不同的存储库,它们在构建过程中作为 nuget 包发布。最近,我将 webapi2 应用程序的 nuget 包引用更新为这些常见包的更新版本。其中一个程序集 Microsoft.Icm.Common.Web 的较新版本不再具有属性 WebApiExceptionHandlerAttribute。因此,在构建 webapi2 应用程序时,我删除了 webapi2 控制器类中对该属性的所有引用。当我重建应用程序并将其部署到我们的暂存环境之一时,我看到以下类型加载异常:
消息:无法从程序集“Microsoft.Icm.Common.Web,Version=2.4.0.0,Culture=neutral,PublicKeyToken=null”加载类型“Microsoft.Icm.Common.Web.WebApiExceptionHandlerAttribute”。
StackTrace:在 System.ModuleHandle.ResolveType(RuntimeModule 模块,Int32 typeToken,IntPtr* typeInstArgs,Int32 typeInstCount,IntPtr* methodInstArgs,Int32 methodInstCount,ObjectHandleOnStack 类型)
在 System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule 模块,Int32 typeToken,RuntimeTypeHandle[] typeInstantiationContext,RuntimeTypeHandle[] methodInstantiationContext)
在 System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken,Type[] genericTypeArguments,Type[] genericMethodArguments)
在 System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord,MetadataImport 范围,Assembly 和 lastAptcaOkAssembly,RuntimeModule 装饰模块,MetadataToken 装饰令牌,RuntimeType attributeFilterType,Boolean mustBeInheritable,Object[] 属性,IListderivedAttributes,RuntimeType&attributeType,IRuntimeMethodInfo&ctor,Boolean&ctorHasParameters,Boolean&isVar
在 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule 装饰模块,Int32 装饰元数据令牌,Int32 pcaCount,RuntimeType attributeFilterType,布尔 mustBeInheritable,IList 派生属性,布尔 isDecoratedTargetSecurityTransparent)
在 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeType 类型,RuntimeType caType,布尔继承)
在 System.Web.Http.Controllers.HttpControllerDescriptor.InvokeAttributesOnControllerType(HttpControllerDescriptor 控制器描述符,类型类型)
在 System.Web.Http.Controllers.HttpControllerDescriptor..ctor(HttpConfiguration 配置,字符串控制器名称,类型控制器类型)
在 System.Web.Http.Dispatcher.DefaultHttpControllerSelector.InitializeControllerInfoCache()
在 System.Lazy1.CreateValue()
at System.Lazy1.LazyInitValue()
在 System.Web.Http.Dispatcher.DefaultHttpControllerSelector.GetControllerMapping()
在 System.Web.Http.Routing.AttributeRoutingMapper.AddRouteEntries(SubRouteCollection 收集器,HttpConfiguration 配置,IInlineConstraintResolver constraintResolver,IDirectRouteProvider directRouteProvider)
在 System.Web.Http.Routing.AttributeRoutingMapper.c__DisplayClass2.c__DisplayClass4.b__1()
在 System.Web.Http.Routing.RouteCollectionRoute.EnsureInitialized(Func`1 初始化程序)
在 System.Web.Http.Routing.AttributeRoutingMapper.c__DisplayClass2.b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 System.Web.OData.Routing.Conventions.AttributeRoutingConvention.c__DisplayClass1.<.ctor>b__0(HttpConfiguration 配置)
在 Microsoft.AzureAd.Icm.IcmV3OData.Global.Initialize() 在 E:\bt\787852\repo\src\OData\ICMV3OData\Global.asax.cs:line 66
在 Microsoft.AzureAd.Icm.IcmV3OData.PreLoadInitializationClient.Preload(String[] 参数) 在 E:\bt\787852\repo\src\OData\ICMV3OData\App_Start\PreLoadInitializationClient.cs:line 40
在 System.Web.Hosting.PreloadHost.CreateIProcessHostPreloadClientInstanceAndCallPreload(字符串 preloadObjTypeName,字符串 [] paramsForStartupObj)
在 System.Web.Hosting.PreloadHost.CreateIProcessHostPreloadClientInstanceAndCallPreload(字符串 preloadObjTypeName,字符串 [] paramsForStartupObj)
在 System.Web.Hosting.ProcessHost.PreloadApplicationIfRequired(字符串 appId,IApplicationHost appHostParameter,HostingEnvironmentParameters hostingParameters,LockableAppDomainContext ac)'。工作进程将被标记为不健康并被关闭。数据字段包含错误代码。
尽管我最近构建的 webapi2 应用程序不应该再引用不可用的 WebApiExceptionHandlerAttribute(在较新的 Microsoft.Icm.Common.Web 程序集中),但在运行应用程序时,似乎以某种方式使用了不可用的属性。我使用了 Resharper 的 dotnetpeek 之类的工具,并在 binplaced 程序集中搜索了术语“WebApiExceptionHandlerAttribute”,但我没有看到该属性的任何匹配项。那么,我该如何弄清楚为什么 Web 应用程序在应用程序启动时仍试图定位该类型?
【问题讨论】:
标签: asp.net .net-assembly typeloadexception