2012-02-02 2 views
5

У меня есть следующий сценарий:Ошибка в динамически загружаемых пользовательских элементов управления, которые ссылаются на другие элементы управления в различных каталогах

Моя структура каталогов:

  • ./Pages/Page.aspx
  • ./RedControls /RedControl.ascx
  • ./BlueControls/BlueControl.ascx

Page.aspx.cs динамически создает RedControl:

RedControls_RedControl C = (RedControls_RedControl)Page.LoadControl("~/RedControls/RedControl.ascx"); 

RedControl.ascx использует BlueControl:

<uc:BlueControl runat="server" ID="ctrControl" /> 

Это прекрасно работает в режиме разработки, однако, когда я раскрываю его, я получаю:

типа Exception - HttpParseException - База class включает поле 'ctrControl', но его тип (BlueControls_BlueControl) несовместим с типом элемента управления (ASP.BlueControls_BlueControl_ascx).

Если я перемещаю RedControl и BlueControl в том же каталоге, тогда он отлично работает при развертывании.

Как я могу заставить это работать без переноса файлов в один каталог (у нас слишком много экземпляров этого).

Любое понимание было бы весьма полезным.

+0

Существуют ли, возможно, старые версии файлов ASCX или DLL? Тот факт, что он говорит, что тип не совместим, указывает мне, что он загружает тип из неожиданного источника. – Jacob

+0

Нет, старые версии не установлены. Свежая установка. – Jack

+0

Вы пытались использовать «..» вместо «~», например «LoadControl» («../ RedControls/RedControl.ascx»); – Akhil

ответ

3

Это может произойти в некоторых сценариях, где у вас есть несколько папок, у которых есть элементы управления, которые указывают друг на друга в обоих направлениях (или в более сложных ситуациях с большим количеством папок).

Хорошая новость заключается в том, что существует простой способ решить эту проблему: отключите дозирование, установив пакетный «ложный» в разделе <compilation> в web.config.

+0

Это всего лишь жизнеспособное решение для небольших проектов. Это не рекомендуется для более крупных развертываний. Ищете определённое исправление, а не полоса. – Jack

+0

Собственно, это не тот случай. В некоторых случаях мы предлагали этот метод для клиентов с очень большими решениями, и у них был хороший успех. Первое, что вы должны попробовать здесь, это проверить, действительно ли это решение решает проблему.Если да, то вы можете посмотреть на использование памяти, чтобы проверить, делает ли она измеримую разницу. –

Смежные вопросы