У меня очень зашитая ошибка, один из моих настраиваемых элементов управления кажется, что создает два скомпилированных файла, и когда я пытаюсь загрузить его динамически с 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" %>
Конфиг
Мой 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
истиной и ложью и той же проблемой. - Я попытался также остановить Интернет, удалить все временные файлы, снова открыть, и снова было.
- Я пытаюсь разместить мьютекс на global.asax, когда приложение начинает блокировать только одну компиляцию за раз, но это тоже не удается.
- С того момента, как это работает, все в порядке, но если не работает, автоматически не исправляется.
- Код, который я загружаю для этого настраиваемого элемента управления, существует и вызывается более чем в одном месте кода на разных страницах.
- Остальные кастомные элементы управления, с аналогичной нагрузкой, проблем не возникли.
- ViewState отключен для этого настраиваемого элемента управления.
- Я также попытался переместить некоторый код, изменить полный вызов функции с помощью микрооптимизации, снова не потерпеть неудачу.
Нормально работает на компьютере разработчика. Я помещаюbatch="true"
в web.config, и ошибка появляется сразу.- Других проблем, подобных этой, вроде ошибки, которую мы не можем исправить ни на что, нет. Система работает несколько дней, пул вообще НЕ перерабатывается, память стабильна, есть больше свободного места. Программа работает уже много лет, но мы меняемся практически каждый день с обновлениями.
- Под одним и тем же основным кодом работает более одного сайта (что-то вроде stackexchange), и у всех одна и та же случайная проблема.
- AutoEventWireup является ложным
- Он появляется и на другом настраиваемом элементе управления, который я загружаю таким же образом.
Что я делаю сейчас в качестве обходного пути, когда появляется эта ошибка: я просто заставляю проект перекомпилировать с небольшим изменением, и ошибка исчезает до следующего обновления.
У меня есть ошибка, которая пытается решить последние три недели, но не выясняет причину. Я пробовал почти все, что мог, но все терпит неудачу, и ошибка появляется снова. Так что я пишу здесь, может быть, кто-то может мне помочь и найти выход из этого.
Последнее слово: эта ошибка сумасшедшая, пользовательский элемент управления такой же, я делаю что-нибудь с ним, я загружаю его только динамически и бум, компилятор имеет его два разных раза по какой-то причине, о которой знает только он, - случайным образом.
Обновление 1
Мне удалось воспроизвести ошибку на машине разработчика. Там я обнаружил, что два модуля dll, которые содержат этот настраиваемый элемент управления, имеют разные.
Один представлял собой набор из 4 настраиваемых элементов управления вместе. Другой модуль был только настраиваемым элементом управления.
Обходной путь
После трех недель попыток исправить эту ошибку я пришел к выводу, что эта ошибка появляется, когда компилятор выполняет пакетную компиляцию каталога и объединяет множество различных настраиваемых элементов управления в одну и ту же dll. Поэтому, когда я пытаюсь загрузить его в одиночку, возникает это исключение.
Поэтому я перемещаю проблемный настраиваемый элемент управления в одиночку в другой каталог и, кажется, пока избегаю этого.
Обновление 2
Появляется снова, даже после того, как я переместил некоторые файлы в другой каталог. Является случайным и не может найти четкой связи с тем, что его запускает.
Обновление 3
Поскольку мы заметили, что основной проблемой здесь является пакетная компиляция (batch="true"
), которая компилирует на одной и той же dll множество настраиваемых элементов управления, один из способов сказать компилятору НЕ делать этого - это _ 12_. Я использую его со значением 100, и проблема появляется снова, теперь я уменьшил его до 40 и протестировал его.
maxBatchGeneratedFileSize="40"
maxBatchGeneratedFileSize
, при пакетной компиляции пытаюсь сказать компилятору, чтобы он не объединял многие элементы управления вместе. - person Aristos   schedule 05.03.2013.ascs
- person Aristos   schedule 07.03.2013