Часть веб-приложения, которое мы имеем, использует внутреннюю сборку веб-элемента управления. Эта сборка содержит несколько веб-элементов управления, где некоторые из них используются другими веб-элементами управления в одной сборке.
Сборка построена как веб-сайт с проектом веб-развертывания.
Страницы основного веб-приложения динамически компилируются через службу в одну сборку и помещаются в соответствующую папку bin. На нашем сервере разработки старые сборки не всегда приводятся в порядок и удаляются, что означает, что папка заполнена старыми сборками.
Когда запускается страница, которая использует внутреннюю сборку веб-элемента управления (упомянутую выше), экземпляр asp.net выбрасывает нехватку памяти при загрузке всех старых сборок, пытаясь определить, какая сборка содержит ссылку на пользовательский элемент управления используется другим пользовательским элементом управления в той же сборке.
Мы использовали следующие элементы внутри пользовательских элементов управления верхнего уровня, чтобы зарегистрировать другие элементы управления
<%@ Register Src="~/....ascx" TagPrefix="UC" TagName="...." %>
Конечно, когда приложение запускается, оно не дает никакой информации о том, в какой сборке оно может быть найдено.
Кто-нибудь сталкивался с этой проблемой раньше?
На самом деле это не проблема, так как наши работающие серверы используют инструмент очистки для удаления старых сборок, но все еще существуют потенциальные ситуации, когда мы можем выйти из памяти из-за этого (например, инструмент перестает работать!), Поэтому было бы хорошо решить эту проблему.
Спасибо
Вот трассировка стека
[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