¿Hay alguna forma de asignar métodos condicionales o agregar directivas de preprocesador en tiempo de ejecución en C #?

StackOverflow https://stackoverflow.com/questions/814337

Pregunta

El objetivo es poder activar las llamadas de depuración en tiempo de ejecución desde una base de datos en una construcción de producción ...

¿Fue útil?

Solución

No; el punto de los métodos condicionales y las directivas de preprocesador es que hacen que el compilador omita el código del ejecutable final. El equivalente en tiempo de ejecución de estos es una declaración if .

Sin embargo, programación orientada a aspectos es aproximadamente equivalente a lo que estás preguntando, ya que te permite inyectar código en un programa en ejecución que de otra manera no estaría allí.

Editar: como lo mencionó Joe, la forma de hacerlo es programarse en un marco de registro como log4net que permita un control preciso sobre lo que se registra.

Otros consejos

No en el nivel de preprocesador. Después de todo, estás ejecutando el resultado de ese proceso. Por supuesto, puede cambiar sus comprobaciones de preprocesador para que sean comprobaciones de código normales, que obviamente pueden cambiarse según sea necesario.

No, pero la mayoría de los subsistemas de registro proporcionan esta capacidad. P.ej. con log4net puede cambiar el nivel de registro dinámicamente, o si usa System.Diagnostics.Trace puede cambiar el TraceSwitch a nivel dinámicamente.

Obviamente, no puede afectar el código binario como tal (como con la declaración #if).

Lo que normalmente hago es asegurarme de que mi código contenga muchos registros, que se activan mediante interruptores de rastreo . De esa manera, puede hacer que un sistema se ejecute en producción con poco o ningún registro, y cuando quiera investigar algún problema, puede activar el inicio de sesión modificando el archivo de configuración.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top