"Impossible de charger le type" sur le site déployé faisant référence aux anciennes pages / classes
-
13-11-2019 - |
Question
Lorsque j'exécute mon code dans vs débogueur et que je l'ai configuré pour attraper des exceptions CLR lorsque jeté, je reçois des tonnes de ces méthodes httpexceptions qui disent "ne pouvaient pas charger de type" qui font référence aux pages / classes qui ont été supprimées de l'application.Cela ne pose aucun problème avec les pages (.NET sait ignorer cette exception en quelque sorte), mais c'est vraiment ennuyeux.
trace de pile:
System.Web.dll!System.Web.UI.TemplateParser.GetType(string typeName, bool ignoreCase, bool throwOnError) + 0x1b0 bytes
System.Web.dll!System.Web.UI.TemplateParser.ProcessInheritsAttribute(string baseTypeName, string codeFileBaseTypeName, string src, System.Reflection.Assembly assembly) + 0x62 bytes
System.Web.dll!System.Web.UI.TemplateParser.PostProcessMainDirectiveAttributes(System.Collections.IDictionary parseData) + 0x118 bytes
System.Web.dll!System.Web.UI.PageParser.PostProcessMainDirectiveAttributes(System.Collections.IDictionary parseData) + 0x6b bytes
System.Web.dll!System.Web.UI.TemplateParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0x18b bytes
System.Web.dll!System.Web.UI.TemplateControlParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0x90 bytes
System.Web.dll!System.Web.UI.PageParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0x11 bytes
System.Web.dll!System.Web.UI.TemplateParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x13f bytes
System.Web.dll!System.Web.UI.BaseTemplateParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x1ea bytes
System.Web.dll!System.Web.UI.TemplateControlParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x44 bytes
System.Web.dll!System.Web.UI.PageParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x45 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseStringInternal(string text, System.Text.Encoding fileEncoding) + 0x378 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseString(string text, System.Web.VirtualPath virtualPath, System.Text.Encoding fileEncoding) + 0x6f bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseFile(string physicalPath, System.Web.VirtualPath virtualPath) + 0x115 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseInternal() + 0x57 bytes
System.Web.dll!System.Web.UI.TemplateParser.Parse() + 0x64 bytes
System.Web.dll!System.Web.Compilation.BaseTemplateBuildProvider.CodeCompilerType.get() + 0x6f bytes
System.Web.dll!System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(System.Web.Compilation.BuildProvider buildProvider) + 0x42 bytes
System.Web.dll!System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(System.Collections.ICollection buildProviders) + 0xca bytes
System.Web.dll!System.Web.Compilation.WebDirectoryBatchCompiler.Process() + 0x5d bytes
System.Web.dll!System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(System.Web.Hosting.VirtualDirectory vdir, bool ignoreErrors) + 0x48 bytes
System.Web.dll!System.Web.Compilation.BuildManager.BatchCompileWebDirectory(System.Web.Hosting.VirtualDirectory vdir, System.Web.VirtualPath virtualDir, bool ignoreErrors) + 0xbc bytes
System.Web.dll!System.Web.Compilation.BuildManager.CompileWebFile(System.Web.VirtualPath virtualPath) + 0x5d bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(System.Web.VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile, bool throwIfNotFound, bool ensureIsUpToDate) + 0x141 bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(System.Web.HttpContext context, System.Web.VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile, bool throwIfNotFound, bool ensureIsUpToDate) + 0x70 bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResult(System.Web.HttpContext context, System.Web.VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile, bool ensureIsUpToDate) + 0x5b bytes
System.Web.dll!System.Web.UI.BaseTemplateParser.GetReferencedType(System.Web.VirtualPath virtualPath, bool allowNoCompile) + 0x51 bytes
System.Web.dll!System.Web.UI.PageParser.ProcessMainDirectiveAttribute(string deviceName, string name, string value, System.Collections.IDictionary parseData) + 0x67e bytes
System.Web.dll!System.Web.UI.TemplateParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0xf9 bytes
System.Web.dll!System.Web.UI.TemplateControlParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0x90 bytes
System.Web.dll!System.Web.UI.PageParser.ProcessMainDirective(System.Collections.IDictionary mainDirective) + 0x11 bytes
System.Web.dll!System.Web.UI.TemplateParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x13f bytes
System.Web.dll!System.Web.UI.BaseTemplateParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x1ea bytes
System.Web.dll!System.Web.UI.TemplateControlParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x44 bytes
System.Web.dll!System.Web.UI.PageParser.ProcessDirective(string directiveName, System.Collections.IDictionary directive) + 0x45 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseStringInternal(string text, System.Text.Encoding fileEncoding) + 0x378 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseString(string text, System.Web.VirtualPath virtualPath, System.Text.Encoding fileEncoding) + 0x6f bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseFile(string physicalPath, System.Web.VirtualPath virtualPath) + 0x115 bytes
System.Web.dll!System.Web.UI.TemplateParser.ParseInternal() + 0x57 bytes
System.Web.dll!System.Web.UI.TemplateParser.Parse() + 0x64 bytes
System.Web.dll!System.Web.Compilation.BaseTemplateBuildProvider.CodeCompilerType.get() + 0x6f bytes
System.Web.dll!System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(System.Web.Compilation.BuildProvider buildProvider) + 0x42 bytes
System.Web.dll!System.Web.Compilation.WebDirectoryBatchCompiler.CompileNonDependentBuildProviders(System.Collections.ICollection buildProviders) + 0xca bytes
System.Web.dll!System.Web.Compilation.WebDirectoryBatchCompiler.Process() + 0x5d bytes
System.Web.dll!System.Web.Compilation.BuildManager.BatchCompileWebDirectoryInternal(System.Web.Hosting.VirtualDirectory vdir, bool ignoreErrors) + 0x48 bytes
System.Web.dll!System.Web.Compilation.BuildManager.BatchCompileWebDirectory(System.Web.Hosting.VirtualDirectory vdir, System.Web.VirtualPath virtualDir, bool ignoreErrors) + 0xbc bytes
System.Web.dll!System.Web.Compilation.BuildManager.CompileWebFile(System.Web.VirtualPath virtualPath) + 0x5d bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(System.Web.VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile, bool throwIfNotFound, bool ensureIsUpToDate) + 0x141 bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(System.Web.HttpContext context, System.Web.VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile, bool throwIfNotFound, bool ensureIsUpToDate) + 0x70 bytes
System.Web.dll!System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(System.Web.VirtualPath virtualPath, System.Web.HttpContext context, bool allowCrossApp, bool throwIfNotFound) + 0x7e bytes
System.Web.dll!System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(System.Web.VirtualPath virtualPath, System.Type requiredBaseType, System.Web.HttpContext context, bool allowCrossApp) + 0x35 bytes
System.Web.dll!System.Web.UI.PageHandlerFactory.GetHandlerHelper(System.Web.HttpContext context, string requestType, System.Web.VirtualPath virtualPath, string physicalPath) + 0x20 bytes
System.Web.dll!System.Web.UI.PageHandlerFactory.GetHandler(System.Web.HttpContext context, string requestType, string virtualPath, string path) + 0x26 bytes
System.Web.dll!System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() + 0x14f bytes
System.Web.dll!System.Web.HttpApplication.ExecuteStep(System.Web.HttpApplication.IExecutionStep step, ref bool completedSynchronously) + 0xb9 bytes
System.Web.dll!System.Web.HttpApplication.PipelineStepManager.ResumeSteps(System.Exception error) + 0x39f bytes
System.Web.dll!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext context, System.AsyncCallback cb) + 0x5a bytes
System.Web.dll!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest wr, System.Web.HttpContext context) + 0xbe bytes
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr managedHttpContext, System.IntPtr nativeRequestContext, System.IntPtr moduleData, int flags) + 0x247 bytes
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr managedHttpContext, System.IntPtr nativeRequestContext, System.IntPtr moduleData, int flags) + 0x29 bytes
[Native to Managed Transition]
[Managed to Native Transition]
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(System.IntPtr managedHttpContext, System.IntPtr nativeRequestContext, System.IntPtr moduleData, int flags) + 0x2cc bytes
System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(System.IntPtr managedHttpContext, System.IntPtr nativeRequestContext, System.IntPtr moduleData, int flags) + 0x29 bytes
[Appdomain Transition]
La solution
J'ai résolu ce moment où Débogage d'une erreur avec l'aspnet_compiler.Souvent que mon projet avait les fichiers physiques .aspx dans des répertoires de contenu sur mon site qui ont été "exclus" de mon projet.Parce qu'ils ont été exclus, ils n'ont lancé aucune erreur de compilation.
Pour une raison quelconque, la pages Web (ASPX) Compilation Build Manager les trouve et essaie de les construire!Je suppose que cela a trait à la séparation de la compilation entre les fichiers DLL et ASPX.L'ASPNET_COMPILER ne vérifie pas le projetNAME.VBPROJ (ou .CSPROJ) pour quelles pages sont censées être compilées, elle les compile tous.(Si quelqu'un pouvait documenter cela, ce serait génial)!
Autres conseils
J'ai expérimenté le même problème.C'était avec un fichier ASCX.Cependant, son code derrière se trouve dans une DLL.Cela fonctionnait sur un serveur mais pas un autre.Une comparaison entre les DLL a montré une incohérence.Nous avons copié les DLL de la version de travail à la version non fonctionnelle et le problème a été résolu.