2012-02-02 3 views
5

ho il seguente scenario:Errore in controlli utente caricate dinamicamente che fanno riferimento a altri controlli in diverse directory

La mia struttura di directory è:

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

Page.aspx.cs crea dinamicamente RedControl:

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

RedControl.ascx utilizza BlueControl:

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

Questa grande opera in modalità di sviluppo, tuttavia quando schiero, ottengo:

Tipo di eccezione - HttpParseException - La base la classe include il campo 'ctrControl', ma il suo tipo (BlueControls_BlueControl) non è compatibile con il tipo di controllo (ASP.BlueControls_BlueControl_ascx).

Se sposto RedControl e BlueControl nella stessa directory, funziona correttamente quando viene distribuito.

Come posso farlo funzionare senza dover spostare i file in una singola directory (abbiamo troppe istanze di questo).

Qualsiasi intuizione sarebbe molto apprezzata.

+0

Esistono forse vecchie versioni di file ASCX o DLL distribuiti? Il fatto che il tipo non sia compatibile indica a me che sta caricando il tipo da una fonte inaspettata. – Jacob

+0

No, non ci sono versioni precedenti distribuite. Installazione fresca – Jack

+0

hai provato a utilizzare ".." invece di "~" come "LoadControl (" ../ RedControls/RedControl.ascx "); – Akhil

risposta

3

Ciò potrebbe verificarsi in alcuni scenari in cui sono presenti più cartelle con controlli che puntano l'una verso l'altra in entrambe le direzioni (o in situazioni più complesse che comportano più cartelle).

La buona notizia è che esiste un modo semplice per risolverlo: disattivare il batch impostando batch = "false" nella sezione <compilation> in web.config.

+0

Questa è solo una soluzione praticabile per piccoli progetti. Non è raccomandato per le distribuzioni più grandi. Cerchi una soluzione definitiva, non un cerotto. – Jack

+0

In realtà, non è così. In alcuni casi abbiamo suggerito questa tecnica a clienti con soluzioni molto grandi e hanno avuto un buon successo. La prima cosa che dovresti provare qui è controllare se fare questo risolva il problema.Se lo fa, allora puoi guardare l'utilizzo della memoria per verificare se fa una differenza misurabile. –