У меня очень проводная ошибка, один из моих настраиваемых элементов управления, похоже, создает два скомпилированных файла, и когда я пытаюсь загрузить его динамически с помощью 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. Ошибка все еще здесь, независимо от того, что я делаю.
Я также пытаюсь использовать оба метода, каждый из них один и вместе (опять же сбой)
<%@ Register src="~/mod/OneProduct_MediumImage.ascx" tagname="OneProduct_MediumImage" tagprefix="uc1" %>
<%@ Reference Control="~/mod/OneProduct_MediumImage.ascx" %>
Config
Мой web.config, я попробовал с maxBatchSize
20, 100, 1000, также с optimizeCompilations
true или false, но ошибка появляется снова.
<compilation debug="false" defaultLanguage="C#" batch="true"
maxBatchSize="800" batchTimeout="10800" optimizeCompilations="false"
targetFramework="4.0">
Теперь некоторые подробности о
- Ошибка является случайной, в некоторых компиляторах появляется другое не.
- Проект большой, страницы живут с большим количеством людей каждую минуту, которые просят что-то увидеть, но также появляются, когда внутри нет никого.
- Выполняется на 64-битной dot.net 4, Интегрировано
- Запускайте как веб-сад, но также тестируйте и один пул один (и получите ту же проблему).
- Сессия отключена в полном проекте.
- Страницы запускаются с 2007 года, но эта проблема появляется в прошлом месяце, к сожалению, я не могу найти, где и как запускается, или что запускается, потому что я опаздываю на несколько дней, чтобы увидеть ее.
- Появляется только одна пользовательская управляющая нагрузка, которая имеет тяжелый вызов.
- У меня есть изменение в 4 раза, когда код внесет небольшие изменения или большие изменения и все еще там.
- Я попытался с
optimizeCompilations
true и false и той же проблемой. - Я также попытался остановить веб-сайт, удалить все временные файлы, повторно открыть и снова появился.
- Я попытался поместить мьютексы на global.asax, когда приложение начинает блокировать только одну компиляцию в то время, но это также не удается.
- С момента, когда это работает, тогда все хорошо, но если не работает, то не исправляется автоматически.
- Код, загружающий этот настраиваемый элемент управления, существует и вызывается в нескольких местах кода на разных страницах.
- Другие пользовательские элементы управления с аналогичной нагрузкой не имеют проблем.
- ViewState отключен для этого настраиваемого элемента управления.
- Я также пытаюсь переместить некоторый код, сменить полный вызов функции с помощью микро оптимизаций, снова не сработает.
-
Работает отлично на компьютере разработки. Я помещаюbatch="true"
в web.config, и ошибка появляется сразу. - Других подобных проблем нет, таких как ошибка, которую мы не можем исправить независимо от того, что. Система запускается в течение нескольких дней, пул НЕ перерабатывается, память стабильна, и есть больше свободного использования. Программа запускается уже много лет, но мы меняемся почти каждый день с обновлениями.
- В рамках одного и того же кода ядра работает более одного сайта (что-то вроде stackexchange), и все они имеют одну и ту же случайную проблему.
- Ошибка AutoEventWireup
- Он появляется и на другом настраиваемом элементе управления, который я загружаю таким же образом.
Что я делаю сейчас в качестве обходного пути при появлении этой ошибки: я просто заставляю проект перекомпилировать с небольшим изменением, и ошибка исчезнет до следующего обновления.
У меня есть ошибка, которая пытается решить последние недели дерева без причины. Я стараюсь почти все, что могу, но все не удается, и ошибка появляется снова. Поэтому я публикую здесь, может быть, некоторые могут помочь мне и найти выход из этого.
Последнее слово: эта ошибка сумасшедшая, пользовательский элемент управления один и тот же, я делаю что-нибудь на нем Я загружаю его только динамически и бум, у компилятора есть по два раза по разному, что только он знает - случайным образом.
Обновление 1
Мне удалось воспроизвести ошибку на машине разработчика. Там я обнаружил, что два модуля dll, которые содержат этот настраиваемый элемент управления, отличаются.
Один из них представлял собой набор из 4 пользовательских элементов управления. Другим модулем был только пользовательский контроль.
Обход
После недель дерева, пытающихся исправить эту ошибку, я заканчиваю тем, что эта ошибка появляется, когда компилятор выполняет пакетную компиляцию каталога и связывает множество разных настраиваемых элементов управления в одной и той же DLL. Поэтому, когда я пытаюсь загрузить его в одиночку, это исключение.
Поэтому я перемещаю проблемный пользовательский элемент управления только в другом каталоге и, кажется, сейчас его избегаю.
Обновление 2
Появляется снова, даже после перемещения некоторых файлов в другой каталог. Является случайным и не может найти четкую связь с тем, что вызывает его.
Обновление 3
Поскольку у нас есть точка, главная проблема здесь - пакетный компилятор (batch="true"
), который скомпилирует в одной и той же DLL многие пользовательские элементы управления, один из способов сказать компилятору НЕ делать это, это maxBatchGeneratedFileSize
. Я использую его со значением 100, и проблема появляется снова, теперь я опустил ее до 40 и проверил ее.
maxBatchGeneratedFileSize="40"