2009-12-29 8 views
6

Por alguna razón, la siguiente línea no hace nada en mi proyecto de ASP.NET MVC:Debug.Assert() ha dejado de trabajar en mi proyecto

System.Diagnostics.Debug.Assert(false); 

tengo triple comprobado que estoy usando la configuración de depuración y "Definir constante de depuración" está marcada en la configuración de configuración de depuración.

El mismo problema también ocurre en mi proyecto de prueba de unidad.

Implementar mi propio método assert parece trivial, pero un poco incómodo. Cualquier sugerencia sobre cómo solucionar esto sería muy apreciada.

Edit: Estoy usando varios módulos de terceros en mi proyecto. ¿Podría esto ser causado al hacer referencia a un módulo que se compila en modo de lanzamiento?

+0

¿Ha verificado dos veces que no está ejecutando la versión de lanzamiento? – ChrisF

+1

¿Qué le parece abrir su dll/exe con Reflector y ver si la afirmación está realmente en el código? ¿Y su montaje está realmente cargado desde la ubicación que cree que es? Tal vez verifique en otro momento que está usando la versión de depuración. –

+0

@ChrisF: Como dije, sí. Tres veces ... :-) –

Respuesta

0

Dado que está ejecutando ASP.NET MVC, ¿podría haber una depuración = falsa en su web.config que está causando el problema?

+0

Desafortunadamente no. Acabo de consultar mi web.config y la palabra debug está solo en esta línea:

+0

También busque si hay una sección" system.diagnostics "en el archivo de configuración. Puede desactivar las aserciones en su archivo de configuración. –

+0

@Eric: Gracias por la sugerencia, pero la palabra "diagnóstico" no se menciona en mi web.config. –

6

Aserción de ASP.Net se muestran en la Consola VS mientras su página web se muestra a través de VisualStudio. No interrumpe el hilo para mostrar un MsgBox o ir a la línea de afirmación como un lenguaje de programación.

1

Antigua pregunta, pero si no tiene definido un oyente predeterminado, no mostrará un diálogo de mensaje como de costumbre. No he confirmado si realmente dispara y solo me lo comen (sospecho que es el caso) o si simplemente no se dispara.

Pero de cualquier manera no se mostrará el cuadro de diálogo.

A partir de los documentos de DefaultTraceListener

La pantalla del cuadro de mensaje para el método de afirmar y Falla llama depende de la presencia de la DefaultTraceListener. Si el DefaultTraceListener no se encuentra en la colección Listeners, no se muestra el mensaje .

El DefaultTraceListener se puede quitar por el elemento , por el elemento, o llamando al método Clear en la propiedad oyentes (System.Diagnostics.Trace.Listeners.Clear()).

Puede revisar sus oyentes y obtener el tipo mediante el uso de un código, como a continuación:

var listeners = new TraceListener[Debug.Listeners.Count]; 
Debug.Listeners.CopyTo(listeners, 0); 
foreach (var listener in listeners) { 
    Debug.WriteLine("Name : {0} of type : {1}", listener.Name, listener.GetType()); 
} 

Si usted no tiene uno llamado "defecto", Debug.Assert fallará sin.

En cuanto a la configuración va, esto va a funcionar asumiendo un detector denominado defecto está disponible:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Esto funciona asumiendo un detector denominado defecto está disponible:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Esto funcionará definimos explícitamente nuestro Predeterminado:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="Default" type="System.Diagnostics.DefaultTraceListener" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Esto no funciona:

<system.diagnostics> 
    <trace autoflush="false"> 
     <listeners> 
      <remove name="Default" /> 
      <add name="bigEarsListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="TracingInfo.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

Si usted no tiene una sección de diagnóstico en su web.config entonces el defecto podría estar recibiendo eliminado o anulado por alguna extensión VS etc, por lo que la adición de esta sección debe traer de vuelta a un comportamiento esperado.

Cuestiones relacionadas