Ensamblados, Pedro Luna

07/01/2005 - 14:09 por David caso | Informe spam
he tardado, la gripe, que este año viene que jode, y yo que las agarro
todas (enfermedades, borracheras,), menos mujeres, ;).

bueno de una manera bastante "rustica", y como me comentaste, a traves
del StackTrace se puede conseguir.

mTraza = System.Environment.StackTrace.ToString();
mTraza = mTraza.Substring(mTraza.IndexOf("NombreEnsambladoPropio"));
mTraza = mTraza.Substring(mTraza.IndexOf("at"));
mTraza = mTraza.Substring(2,(mTraza.IndexOf(".") - 2));

al final te da el nombre del ensamblado que carga al Ensamblado Propio(Dll).

pues nada eso, si alguien sabe hacer esto de otra manera, pues que no
calle el cobarde, un saludin.
 

Leer las respuestas

#1 Pedro Luna Montalvo, MVP
07/01/2005 - 15:22 | Informe spam
Saludos David,

Pos asi es la vida.asi como la disfrutas..las pagas... que soberana
borrachera sera esa que dura hasta el dis de reyes :)

Ahora, por lo otro. Creo que nos confundimos, pues cuando mencionada a
StackTrace, me referia a la clase StackTrace y no a la propiedad.

Mira el siguiente codigo que hace uso de esta propiedad para recorrer la
pila de llamadas, muestra el nombre del metodo, el tipo donde esta
declarado, y el espacio de nombres de este tipo.

Ademas, si esta disponible, tambien mostrara la ubicacion en el codigo
original donde se origino el salto en la ejecucion.


using System;
using System.Diagnostics;
using System.Reflection;

namespace EspacioNombres1 {

class Tipo1 {

static void Main() {
Metodo1();
}

static void Metodo1() {
TipoSinEspacioNombres.Metodo2();
}

}

}


class TipoSinEspacioNombres {

public static void Metodo2() {
EspacioNombres2.MostrarStackTraceLib.MostrarStackTrace();
}

}

namespace EspacioNombres2 {

class MostrarStackTraceLib {

public static void MostrarStackTrace() {
StackTrace stkTrace = new StackTrace(true);

for (int i = stkTrace.FrameCount - 1; i >= 0; i--) {
string nombreMetodo = "?";
string ubicacionCodigo = "?";
StackFrame stkFrame = stkTrace.GetFrame(i);

// Recuperar el Método y el espacio de nombres al que
pertenece
MethodBase methodBase = stkFrame.GetMethod();
Type typeDeclaringMethod = methodBase.DeclaringType;

if (typeDeclaringMethod != null) {
string nombreTipo = "";

if (typeDeclaringMethod.Namespace != null) {
nombreTipo = typeDeclaringMethod.Namespace + ".";
}

nombreMetodo = nombreTipo + methodBase.Name + "()";
}


// Recuperar inforación de la linea de invocacion (si estpa
disponible)
if (stkFrame.GetILOffset() != -1) {
string nombreArchivo = stkFrame.GetFileName();

if (nombreArchivo != null) {
int lineaActual = stkFrame.GetFileLineNumber();
ubicacionCodigo = nombreArchivo + " en la línea: " +
lineaActual.ToString();
}
}

Console.WriteLine("{0}. {1}", stkTrace.FrameCount - i,
nombreMetodo);
Console.WriteLine(" {0}", ubicacionCodigo);
Console.WriteLine();
}
}

}
}

Para que la ubicacion dentro del codigo este disponible, compilalo en modo
DEBUG.


Saludos
Pedro Luna, [MVP VB.NET]
Gye, Ecu

Preguntas similares