InvalidCastException для объекта того же типа - загрузка пользовательского элемента управления
У меня очень странная ошибка, кажется, что один из моих пользовательских элементов управления - это создание двух скомпилированных файлов, и когда я пытаюсь загрузить его динамически сLoadControl()
это просто неудача, потому что не может привести одно к другому - даже если они абсолютно одинаковы. Я пишу сообщение, чтобы увидеть, что все то же самое, это только изменить скомпилированные DLL.
System.Web.HttpUnhandledException (0x80004005):
Exception of type 'System.Web.HttpUnhandledException' was thrown. --->
System.InvalidCastException:
[A]ASP.Modules_OneProduct_MedioumImage cannot be cast to
[B]ASP.Modules_OneProduct_MedioumImage.
Type A originates from 'App_Web_kg4bazz1, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
in the context 'Default'
at location 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\80ed7513\10eb08d9\App_Web_kg4bazz1.dll'.
Type B originates from 'App_Web_oneproduct_mediumimage.ascx.d1003923.4xoxco7b, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
in the context 'Default'
at location 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\80ed7513\10eb08d9\App_Web_oneproduct_mediumimage.ascx.d1003923.4xoxco7b.dll'.
КодЭто код, как сейчас, после того, как я следуюименно то, что написано на MSDN:
foreach (int OneProductID in TheProductIdArrays)
{
// here is the throw.
ASP.Modules_OneProduct_MedioumImage OneProduct =
(ASP.Modules_OneProduct_MedioumImage)LoadControl(@"~/mod/OneProduct_MediumImage.ascx");
// do some work with
//OneProduct
}
Ранее у меня есть Загрузить элемент управления безASP.
но после того, как эта ошибка появляется и ищет решение, я строго следую за тем, что есть на MSDN. Ошибка все еще здесь, независимо от того, что я делаю.
Я также попробовал оба этих метода, каждый в одиночку, и вместе (снова неудача)
конфигМой web.config, я попробую сmaxBatchSize
20, 100, 1000, также сoptimizeCompilations
истина или ложь, но ошибка появляется снова.
Теперь некоторые подробности оОшибка случайная, в некоторых компиляции появляется, в других нет.Проект большой, страницы каждую минуту переполнены множеством людей, которые просят что-то увидеть, но также появляются, когда внутри никого нет.Работает на 64bit dot.net 4, ИнтегрированныйЗапустите как веб-сад, но также протестируйте и один только пул (и получите ту же проблему)Сессия выключена на полном проекте.Страницы запускаются с 2007 года, но эта проблема появляется в прошлом месяце, к сожалению, я не могу найти, где и как запускается, или что вызывает это, потому что я опоздал на несколько дней, чтобы увидеть его.Появляется только один пользовательский элемент управления загрузки, тот, который имеет тяжелый вызов.Я 4 раза менял код, делая небольшие изменения или большие изменения и все еще там.Я попробовал сoptimizeCompilations
правда и ложь и та же проблема.Я попытался также, остановив Интернет, удалите все временные файлы, снова открыв, и было снова.Я пытаюсь разместить мьютекс в global.asax, когда приложение начинает блокировать только одну компиляцию за раз, но это также не удается.С того момента, когда работает, все хорошо, но если не работает, не исправляется автоматически.Код, который я загружаю в этот пользовательский элемент управления, существует и вызывается в нескольких местах кода, на разных страницах.Другие пользовательские элементы управления, с подобной нагрузкой, не имели никаких проблем.ViewState отключен для этого пользовательского элемента управления.Я также попытался переместить некоторый код, изменить полный вызов функции с помощью микрооптимизации, больше ничего не получится.Работает ли нормально на компьютере разработчика, Я ставлюbatch="true"
на web.config и ошибка появляется сразу.Других подобных проблем нет, например, ошибка, которую мы не можем исправить, несмотря ни на что. Система работает в течение нескольких дней, пул НЕ перезапускается вообще, память стабильна, и есть больше свободного использования. Программа работает уже несколько лет, но мы меняемся почти каждый день с обновлениями.Под одним и тем же основным кодом работает более одного сайта (что-то вроде stackexchange) и все они имеют одинаковую случайную проблему.AutoEventWireup является ложнымПоявляется и на других пользовательских элементах управления, которые я загружаю таким же образом.То, что я делаю сейчас как обходной путь, когда появляется эта ошибка: я просто заставляю проект перекомпилировать с небольшим изменением, и ошибка исчезает до следующего обновления.
У меня есть ошибка, которая пытается решить последние три недели без выяснения причины. Я пробовал почти все, что мог, но все не удалось, и ошибка снова появляется. Так что я пишу здесь, может быть, некоторые могут помочь мне и найти выход из этого.
Последнее слово: этот бред сумасшедший, пользовательский элемент управления такой же, я делаю с ним что-нибудь, я только загружаю его динамически и бум, компилятор имеет его два разных раза по какой-то причине, которую знает только он - случайно.
Обновление 1Я смог воспроизвести ошибку на компьютере разработчика. Там я обнаружил, что два модуля DLL, которые содержат этот пользовательский элемент управления, имеют разные.
Один представлял собой связку из 4 пользовательских элементов управления вместе. Другим модулем был только пользовательский элемент управления.
Временное решениеПосле трех недель попыток исправить эту ошибку я в итоге обнаружил, что эта ошибка появляется, когда компилятор выполняет пакетную компиляцию каталога и объединяет множество различных пользовательских элементов управления в одну и ту же DLL. Поэтому, когда я пытаюсь загрузить его в одиночку, это исключение.
Поэтому я перемещаю проблемный пользовательский элемент управления только в другой каталог и, похоже, пока его избегаю.
Обновление 2Появляется снова, даже после того, как я переместил некоторые файлы в другой каталог. Является случайным и не может найти четкую связь с тем, что вызывает его.
Обновление 3Потому что мы заметили, что основной проблемой здесь является пакетная компиляция (batch="true"
), который компилирует на одной и той же dll множество пользовательских элементов управления, одним из способов сказать компилятору, что НЕ делать этого, являетсяmaxBatchGeneratedFileSize
параметр. Я использую его со значением 100, и проблема появляется снова, теперь я снизил его до 40 и протестировал.
maxBatchGeneratedFileSize="40"