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"

Ответы на вопрос(5)

Ваш ответ на вопрос