2009-08-31 12 views
8

Tengo un sistema de plantillas que se parece al antiguo código ASP. Ejecuto esto a través de una clase que reescribe todo en código fuente C#, compila y finalmente lo ejecuta.¿Hay alguna directiva #pragma o similar para el código C# generado que haga coincidir los números de línea del código de la plantilla con el número de línea C#?

Lo que me pregunto es si existe algún tipo de directiva # pragma que pueda rociar el código C# generado con eso hará que los errores de compilación coincidan con los números de línea en mi archivo de plantilla?

Por ejemplo, digamos que tengo esta primera y única línea en mi código de la plantilla:

Object o = datta; // should be data, compiler error 

pero luego con el fin de compilar esto debo añadir un espacio de nombres, una clase, un método, y un poco de la caldera -platear código a él, por lo que esta línea arriba, que es la línea n. ° 1 en mi archivo de plantilla, en realidad termina siendo la línea n. ° 17 (número aleatorio, solo para fines ilustrativos) en el código C#. El error del compilador indicará naturalmente que mi error está en la línea n. ° 17 y no en la línea n. ° 1.

Recuerdo de otro lenguaje de programación que he usado anteriormente (aunque no recuerdo cuál) que tenía una directiva que podía agregar, lo que haría alinear los números de líneas de error.

¿Hay algo así en C# 3.5?

Respuesta

16

Usted tiene #line preprocessor directive.

#line le permite modificar el número de línea del compilador y (opcionalmente) la salida del nombre de archivo para errores y advertencias.

El #line directive podría ser utilizado en una, paso intermedio automatizada en el proceso de generación. Por ejemplo, si se eliminaron líneas del archivo de código fuente original, pero aún deseaba que el compilador generara salida en función de la numeración de línea original en el archivo, puede eliminar líneas y luego simular la numeración de línea original con #line.

El #line hidden Directiva oculta las líneas sucesivas de un depurador, de manera que cuando los pasos de desarrolladores a través del código, las líneas entre una y la siguiente #line hidden#line Directiva (suponiendo que no es otra directiva oculta #line) se ser pisado Esta opción también se puede usar para permitir a ASP.NET diferenciar entre código definido por el usuario y generado por la máquina. Aunque ASP.NET es el principal consumidor de esta característica, es probable que más generadores de fuentes lo utilicen.

A #line hidden La directiva no afecta a los nombres de los archivos ni a los números de línea en los informes de errores. Es decir, si se encuentra un error en un bloque oculto, el compilador informará el nombre del archivo actual y el número de línea del error.

La directiva #line filename especifica el nombre de archivo que desea que aparezca en la salida del compilador. Por defecto, se usa el nombre real del archivo de código fuente. El nombre del archivo debe estar entre comillas dobles ("") y debe ir precedido de un número de línea.

+0

+1, aprende algo nuevo todos los días – JaredPar

+0

¡Eso era exactamente lo que necesitaba! ¡Gracias! –

+0

@Jared: Lo vi un día mirando a través del código WPF generado y fue como. : hmm: :) Es lo que vincula los errores al archivo XAML de origen. –

Cuestiones relacionadas