2012-02-02 8 views
5

Mam następujący scenariusz:Błąd w dynamicznie obciążonych formantów użytkownika, które odwołują się inne kontrolki w różnych katalogach

Moja struktura katalogów jest:

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

Page.aspx.cs dynamicznie tworzy RedControl:

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

RedControl.ascx wykorzystuje BlueControl:

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

Działa to doskonale w trybie rozwoju, jednak gdy wdrożyć go uzyskać:

typ Wyjątek - HttpParseException - Podstawa klasa zawiera pole "ctrControl", ale jego typ (BlueControls_BlueControl) nie jest zgodny z typem kontrolki (ASP.BlueControls_BlueControl_ascx).

Jeśli przeniesię RedControl i BlueControl do tego samego katalogu, to działa prawidłowo po wdrożeniu.

Jak mogę to uruchomić, bez konieczności przenoszenia plików do jednego katalogu (mamy za dużo takich przypadków).

Każdy wgląd byłby bardzo doceniony.

+0

Czy są prawdopodobnie wdrożone stare wersje plików ASCX lub DLL? Fakt, że mówi, że typ nie jest zgodny, oznacza dla mnie, że ładuje typ z nieoczekiwanego źródła. – Jacob

+0

Nie, nie ma wdrożonych starszych wersji. Świeża instalacja. – Jack

+0

czy próbowałeś używać ".." zamiast "~" takich jak "LoadControl (" ../ RedControls/RedControl.ascx "); – Akhil

Odpowiedz

3

Może się to zdarzyć w niektórych scenariuszach, w których istnieje wiele folderów z kontrolkami, które wskazują na siebie nawzajem w obu kierunkach (lub w bardziej złożonych sytuacjach obejmujących więcej folderów).

Dobrą wiadomością jest to, że istnieje prosty sposób rozwiązania tego problemu: wyłącz opcję grupowania, ustawiając polecenie batch = "false" w sekcji <compilation> w pliku web.config.

+0

To tylko realistyczne rozwiązanie dla małych projektów. Nie jest zalecane w przypadku większych wdrożeń. Szukam konkretnej poprawki, a nie pomocy zespołu. – Jack

+0

W rzeczywistości tak nie jest. W niektórych przypadkach sugerowaliśmy tę technikę klientom o bardzo dużych rozwiązaniach i odnieśli oni sukces. Pierwszą rzeczą, którą powinieneś wypróbować, jest sprawdzenie, czy to rzeczywiście rozwiązuje problem.Jeśli tak, to możesz spojrzeć na wykorzystanie pamięci, aby sprawdzić, czy robi mierzalną różnicę. –

Powiązane problemy