Я видел то же самое в дампах памяти на Framework 3.5 SP1.
В блоге Тесс рассказывается о том, что эти сборки хранятся в кэше ASP.NET, и что этот кэш сбрасывает сборки, вызывая их перезагрузку. Предполагалось, что кэш будет сбрасывать их, когда в системе недостаточно памяти, что является поведением по умолчанию для всего, что происходит в кэше ASP.NET. Тесс говорит, что исправление решает эту проблему.
Текущая версия System.Web.Services содержит это в методе AddToCache System.Web.Services.Protocols.ServerProcotol:
HttpRuntime.Cache.Insert(this.CreateKey(protocolType, serverType), value, null, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
Обратите внимание, что это явно устанавливает элемент кэша, чтобы никогда не истек и никогда не быть съемным. Я думаю, что это то, что исправление было изменено для решения проблемы - больше нет автоматической очистки кэша.
Теперь в нашем приложении, которое испытывает эту проблему, у нас есть некоторый код, который вручную удаляет все из кэша ASP.NET при определенных обстоятельствах. Я думаю, именно поэтому мы видим проблему: хотя исправление остановило ASP.NET Cache, автоматически удаляя эти сборки из кэша, наш код появляется и очищает кэш вручную.
Интересно, ваше приложение (или какой-либо из его сторонних компонентов) что-то делает с Cache, который может удалять эти элементы?