Considerando que el archivo de datos de depuración está disponible (PDB) y usando System.Reflection u otro marco similar como Mono.Cecil, cómo recuperar mediante programación el nombre del archivo fuente y el número de línea donde un tipo o un miembro de un tipo es declarado.¿Cómo obtener el nombre del archivo de origen y el número de línea de un miembro de tipo?
Por ejemplo, digamos que usted ha compilado este archivo en un conjunto:
C: \ MyProject \ Foo.cs
1: public class Foo
2: {
3: public string SayHello()
4: {
5: return "Hello";
6: }
7: }
Cómo hacer algo como:
MethodInfo methodInfo = typeof(Foo).GetMethod("SayHello");
string sourceFileName = methodInfo.GetSourceFile(); // ?? Does not exist!
int sourceLineNumber = methodInfo.GetLineNumber(); // ?? Does not exist!
sourceFileName contendría "C: \ MyProject \ Foo.cs" y sourceLineNumber igual a 3.
Actualización: System.Diagnostics.StackFrame
es capaz de obtener esa información, pero solo en el ámbito de la pila de llamadas en ejecución actual. Significa que el método debe invocarse primero. Me gustaría obtener la misma información, pero sin invocar al miembro de tipo.
hay una nueva API para que, sin necesidad de utilizar lector de AP más, ver mi respuesta –