"Impossibile caricare il tipo" sul sito distribuito facendo riferimento a vecchie pagine/classi
-
13-11-2019 - |
Domanda
Quando eseguo il mio codice in vs debugger e lo imposto per catturare le eccezioni CLR quando lanciate, ottengo tonnellate di questi expice di HTTPE che dicono che "non è stato possibile caricare tipo" che si riferiscono a pagine/classi che sono state rimosse dall'applicazione. Non provoca alcun problema con le pagine (.NET sa in qualche modo ignorare questa eccezione), ma è davvero fastidioso.
Stack Trace:
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]
Soluzione
L'ho risolto mentre debug di un errore con ASPNET_COMPILER. Si scopre che il mio progetto aveva i file .aspx fisici nelle directory dei contenuti in tutto il mio sito che sono stati "esclusi" dal mio progetto. Poiché sono stati esclusi, non hanno lanciato errori di tempo di compilazione.
Per qualche motivo, tuttavia, la compilazione Web Page (ASPX) Build Manager li trova e cerca di costruirli! Presumo che ciò abbia a che fare con la separazione nella compilation tra i file DLL e ASPX. ASPNET_COMPILER non controlla ProjectName.vbProj (o .csproj) per quali pagine dovrebbero essere compilate, prepara tutte. (Se qualcuno potesse documentare questo, sarebbe fantastico)!
Altri suggerimenti
Ho riscontrato lo stesso problema. Era con un file ASCX. Tuttavia, il suo codice dietro è in una DLL. Stava lavorando su un server ma non su un altro. Un confronto tra le DLL ha mostrato un'incoerenza. Abbiamo copiato le DLL dalla versione funzionante alla versione non lavorativa e il problema è stato risolto.