2012-06-11 29 views
12

estoy recibiendo un error en mi aplicación asp.net que leeError: No se puede evaluar la expresión porque el código está optimizado

"No se puede evaluar la expresión porque el código está optimizado o un marco nativa es en la parte superior de la pila de llamadas ".

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

Después de buscar SO, veo la mayor parte de los puestos similares implican response.redirect. Mi código está utilizando server.transfer y mi aplicación también está utilizando Master Pages.

¿Cómo puedo resolver este problema?

Actualización: Por alguna razón, este error se produce es que uso Response.Redirect también. Desafortunadamente no puedo usar Server.Execute, porque Server.Execute llama a la página que llama hacia el final.

+0

¿Puedes publicar la pieza de código que arroja la excepción? – davioooh

+0

uhmm ... en mi caso el problema fue causado por 'Response.End' ... Pero mirar su código es muy difícil de decir cuál es la causa de este problema ... – davioooh

Respuesta

13

Usted recibirá un error, pero el bloque de código siguiente trampa de voluntad y se puede seguir con su vida.

Prueba esto:

using System.Threading.ThreadAbortException; 

catch(ThreadAbortException ex) 
{ 
    throw; 
} 
+0

he agregado esto pero sigo teniendo el mismo error –

10

El problema que usted describe parece ser por diseño, como se muestra aquí:

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

Usando Server.Execute debería resolver el problema

+0

La información en su enlace indica .net 1.0 Y 1.1 marco. Estoy usando el framework 4.0. Creo que este problema se resolverá 8 años después. – DotNetRookie

+7

@DotNetRookie Microsoft no resuelve sus problemas, solo márcalos como "problemas conocidos" ... :) – davioooh

+0

El problema con server.execute es que regresa a la página de llamadas. Como actualmente tengo un código que hace server.transfer, quiero ver si puedo seguir con la misma estrategia de codificación. http://techahead.wordpress.com/2007/10/14/aspnet-servertransfer-vs-serverexecute/ – DotNetRookie

2

¿Ha intentado sustituir el server.transfer con response.redirect()?

Server.Transfer VS Response.Redirect

+0

La aplicación actualmente tiene código que usa server.transfer (el código fue hecho por un desarrollador que ya no está aquí), así que necesito mantenerme consistente con la arquitectura actual. – DotNetRookie

1

que se enfrentaron a este mensaje cuando estaba probando de trabajo de multi-threading-aplicación utilizando MS-Test.

Encontré que la razón de esto era porque el hilo principal de prueba terminaba y se inicializaba la limpieza de los objetos, mientras que otros subprocesos creados que deberían ejecutarse infinitamente seguían funcionando.

Como el método de limpieza de pezones mata los objetos, estos hilos se abortan mostrando el mensaje anterior.

Cuestiones relacionadas