Utilice el método StackFrame.GetFileLineNumber , por ejemplo:
private static void ReportError(string message)
{
StackFrame callStack = new StackFrame(1, true);
MessageBox.Show("Error: " + message + ", File: " + callStack.GetFileName()
+ ", Line: " + callStack.GetFileLineNumber());
}
Consulte la entrada del blog de Scott Hanselman para obtener más información.
[Editar: se agregó lo siguiente]
Para aquellos que usan .Net 4.5 o posterior, considere los atributos CallerFilePath , CallerMethodName y CallerLineNumber en el espacio de nombres System.Runtime.CompilerServices. Por ejemplo:
public void TraceMessage(string message,
[CallerMemberName] string callingMethod = "",
[CallerFilePath] string callingFilePath = "",
[CallerLineNumber] int callingFileLineNumber = 0)
{
// Write out message
}
Los argumentos deben ser string
para CallerMemberName
y CallerFilePath
y int
para CallerLineNumber
y deben tener un valor predeterminado. La especificación de estos atributos en los parámetros del método indica al compilador que inserte el valor apropiado en el código de llamada en el momento de la compilación, lo que significa que funciona mediante la ofuscación. Consulte Información de la persona que llama para obtener más información.