Partie d'une application Web, nous utilisons un ensemble de contrôle Web interne. Cet assembly contient plusieurs contrôles utilisateur Web dans lesquels plusieurs d'entre eux sont utilisés par d'autres contrôles Web dans le même assembly.ASP.NET charge tous les assemblys dans bin pour rechercher un contrôle utilisateur
L'assembly est construit en tant que site Web avec un projet de déploiement Web.
Les pages de l'application Web principale sont dynamiquement compilées via un service dans un seul ensemble et placées dans le dossier bin approprié. Dans notre serveur de développement, les anciens assemblages ne sont pas toujours rangés et supprimés, ce qui signifie que le dossier est rempli d'anciens assemblages. Lorsque la page qui utilise l'assembly de contrôle Web interne (mentionné ci-dessus) s'exécute, l'instance asp.net génère une insuffisance de mémoire car elle charge tous les anciens assemblys dans le but de déterminer quel assembly contient la référence. le contrôle utilisateur étant utilisé par l'autre contrôle utilisateur à l'intérieur du même assemblage.
Nous utilisons les éléments suivants dans les commandes de l'utilisateur de haut niveau pour enregistrer les autres contrôles
<%@ Register Src="~/....ascx" TagPrefix="UC" TagName="...." %>
Bien sûr, lorsque l'application fonctionne cela ne donne aucune information à laquelle l'assemblage, il peut le trouver dans.
Y a-t-il quelqu'un qui a déjà rencontré ce problème? Ce n'est pas vraiment un problème car nos serveurs live utilisent un outil de nettoyage pour supprimer les anciens assemblages, mais il y a encore des situations potentielles où nous pourrions perdre de la mémoire (par exemple, l'outil cesse de fonctionner!). agréable de résoudre ce problème.
Merci
Voici la trace de la pile
[OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.]
System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +127
System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +142
System.Reflection.Assembly.Load(String assemblyString) +28
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +46
[ConfigurationErrorsException: Exception of type 'System.OutOfMemoryException' was thrown.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +613
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +203
System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +105
System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +178
System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
System.Web.Compilation.CodeDirectoryCompiler.GetCodeDirectoryAssembly(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories, Boolean isDirectoryAllowed) +8812786
System.Web.Compilation.BuildManager.CompileCodeDirectory(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories) +128
System.Web.Compilation.BuildManager.CompileCodeDirectories() +265
System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +320
[HttpException (0x80004005): Exception of type 'System.OutOfMemoryException' was thrown.]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +58
System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +512
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729
[HttpException (0x80004005): Exception of type 'System.OutOfMemoryException' was thrown.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8894095
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +85
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +259
Je ne sais pas pour vous mais imaginez que nommer fortement vos assemblées peut résoudre le problème - Au moins, il limiterait ce Assemblages ASP.Net examinera le chargement – Basic
Je sais que c'est une vieille question, mais je suppose que si vous allez utiliser la construction incrémentielle dans ** AssemblyInfo.cs ** en utilisant un * le problème peut disparaître, comme: '[assembly: AssemblyVersion (" 1.0. * ")] [assembly: AssemblyFileVersion (" 1.0 . * ")]' – Amro