2012-06-11 5 views
12

sto ottenendo un errore nel mio app asp.net che leggeErrore: impossibile valutare l'espressione perché il codice è ottimizzato

"Impossibile valutare l'espressione perché il codice è ottimizzato o una cornice nativo è in cima lo stack delle chiamate. "

protected void btnCustomerProfile_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Server.Transfer("CustomerProfile.aspx"); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.ToString()); 
    } 
    finally 
    { } 
} 

Dopo la ricerca SO, vedo la maggior parte dei posti simili coinvolgono response.redirect. Il mio codice utilizza server.transfer e la mia applicazione utilizza anche le pagine master.

Come posso risolvere questo problema?

Aggiornamento: Per qualche motivo, questo errore si verifica è che uso Response.Redirect pure. Purtroppo non posso usare Server.Execute, perché Server.Execute chiama la pagina chiamante verso la fine.

+0

puoi pubblicare il codice che genera l'eccezione? – davioooh

+0

uhmm ... nel mio caso il problema è stato causato da 'Response.End' ... Ma guardando il tuo codice è molto difficile dire quale sia la causa di questo problema ... – davioooh

risposta

13

Si otterrà un errore, ma il blocco di codice sotto trappola volontà e si può andare avanti con la tua vita.

Prova questo:

using System.Threading.ThreadAbortException; 

catch(ThreadAbortException ex) 
{ 
    throw; 
} 
+0

ho aggiunto questo ma ottenendo ancora lo stesso errore –

10

Il problema che descrivi sembra essere dal design come illustrato di seguito:

http://support.microsoft.com/kb/312629/EN-US/

Utilizzando Server.Execute dovrebbe risolvere il problema

+0

Le informazioni sul tuo link indicano .net 1.0 E 1.1 framework. Sto usando il framework 4.0. Penserei che questo problema sarebbe risolto 8 anni dopo. – DotNetRookie

+7

@DotNetRookie Microsoft non risolve i suoi problemi, li contrassegna solo come "problemi noti" ... :) – davioooh

+0

Il problema con server.execute è che ritorna alla pagina chiamante. Dal momento che attualmente ho il codice che fa server.transfer voglio vedere se riesco a seguire la stessa strategia di codifica. http://techahead.wordpress.com/2007/10/14/aspnet-servertransfer-vs-serverexecute/ – DotNetRookie

2

Avete provato a sostituire il server.transfer con response.redirect()?

Server.Transfer VS Response.Redirect

+0

L'applicazione attualmente ha il codice che utilizza server.transfer (il codice è stato fatto da uno sviluppatore che non è più qui), quindi ho bisogno di rimanere coerente con l'architettura attuale. – DotNetRookie

1

Ho affrontato questo messaggio quando stavo testando lavoro di multi-threading applicazione utilizzando MS-Test.

Ho trovato il motivo per questo perché il thread principale di test è terminato e inizializzato la pulizia degli oggetti mentre altri thread creati che sono destinati a funzionare all'infinito continuavano a funzionare.

Come metodo di pulizia tettina uccide gli oggetti questi thread viene interrotto mostrando sopra il messaggio.