me encontré con un problema similar. Necesitaba encontrar el nombre de archivo y el número de línea de un método específico con solo el tipo de la clase y el nombre del método. Estoy en una vieja versión mono .NET (unidad 4.6). Utilicé la biblioteca cecil, proporciona algún ayudante para analizar su pbd (o mdb para mono) y analiza los símbolos de depuración. https://github.com/jbevain/cecil/wiki
Para un tipo y método dado:
System.Type myType = typeof(MyFancyClass);
string methodName = "DoAwesomeStuff";
me encontré con esta solución:
Mono.Cecil.ReaderParameters readerParameters = new Mono.Cecil.ReaderParameters { ReadSymbols = true };
Mono.Cecil.AssemblyDefinition assemblyDefinition = Mono.Cecil.AssemblyDefinition.ReadAssembly(string.Format("Library\\ScriptAssemblies\\{0}.dll", assemblyName), readerParameters);
string fileName = string.Empty;
int lineNumber = -1;
Mono.Cecil.TypeDefinition typeDefinition = assemblyDefinition.MainModule.GetType(myType.FullName);
for (int index = 0; index < typeDefinition.Methods.Count; index++)
{
Mono.Cecil.MethodDefinition methodDefinition = typeDefinition.Methods[index];
if (methodDefinition.Name == methodName)
{
Mono.Cecil.Cil.MethodBody methodBody = methodDefinition.Body;
if (methodBody.Instructions.Count > 0)
{
Mono.Cecil.Cil.SequencePoint sequencePoint = methodBody.Instructions[0].SequencePoint;
fileName = sequencePoint.Document.Url;
lineNumber = sequencePoint.StartLine;
}
}
}
Sé que es un poco tarde :) pero espero que esto ayude a alguien!
posible duplicado de [¿Cómo obtener el nombre del archivo de origen y el número de línea de un miembro de tipo?] (Http://stackoverflow.com/questions/126094/how-to-get-the-source-file-name -and-the-line-number-of-a-type-member) –
¿Por qué lo quieres? La mayoría de las razones que puedo pensar se resolverían con herramientas como servidores de Symbol/Source ... –