Dependency Walker funciona en binarios win32 normales. Todos los .NET dll y exe tienen una pequeña parte de encabezado stub que los hace parecer binarios normales, pero básicamente todo lo que dice es "cargue el CLR", así que eso es todo lo que el analizador de dependencias le dirá.
Para ver en qué cosas se basa realmente su aplicación .NET, puede usar el excelente reflector .NET de Red Gate. (EDITAR: tenga en cuenta que .NET Reflector ahora es un producto pago. ILSpy es gratuito, de código abierto y muy similar).
Cargue su DLL en él, haga clic con el botón derecho y elija 'Analizar'; luego verá un elemento "Depende de" que le mostrará todas las otras DLL (y métodos dentro de esas DLL) que necesita.
Sin embargo, a veces puede ser más complicado, ya que su aplicación depende de X dll y X dll está presente, pero por alguna razón no se puede cargar o ubicar en tiempo de ejecución.
Para solucionar ese tipo de problemas, Microsoft tiene un visor de registro de enlace de ensamblado que puede mostrarle lo que está sucediendo en tiempo de ejecución.
Considero que la pequeña utilidad AsmSpy es una herramienta invaluable para resolver problemas con la carga de ensamblajes. Enumera todas las referencias de ensamblado de ensamblados administrados, incluidas las versiones de ensamblado.
Ejecútelo en un símbolo del sistema en el directorio de
.dll
con los siguientes argumentos:Instálelo rápidamente con Chocolatey:
fuente
Abra el archivo de ensamblaje en ILDASM y mire @ el .assembly externo en el MANIFIESTO
fuente
Para examinar las dependencias del código .NET, puede utilizar las capacidades de la herramienta NDepend. La herramienta propone:
Por ejemplo, dicha consulta puede tener este aspecto:
Y su resultado se ve así: (observe la profundidad de la métrica del código , 1 es para llamantes directos, 2 para llamadores de llamantes directos ...) (observe también el botón Exportar a gráfico para exportar el resultado de la consulta a un Gráfico de llamada )
El gráfico de dependencia se ve así:
La matriz de dependencia se ve así:
La matriz de dependencia es de facto menos intuitiva que el gráfico, pero es más adecuada para navegar por secciones complejas de código como:
Descargo de responsabilidad: trabajo para NDepend
fuente
No es necesario descargar e instalar aplicaciones o herramientas de shareware. Puede hacerlo programáticamente desde .NET usando
Assembly.GetReferencedAssemblies()
fuente
[Reflection.Assembly]::LoadFile('C:\absolute\path\to\my.dll').GetReferencedAssemblies()
. Tiene la gran ventaja de no descargar ni buscar herramientas en ubicaciones oscuras de Windows. +1Si está utilizando la cadena de herramientas Mono, puede utilizar la
monodis
utilidad con el--assemblyref
argumento para enumerar las dependencias de un ensamblado .NET. Esto funcionará en archivos.exe
y.dll
.Uso de ejemplo:
Salida de ejemplo (.exe):
Salida de ejemplo (.dll):
fuente
Habilitar registro de enlace de ensamblado establezca el valor de registro EnableLog en HKLM \ Software \ Microsoft \ Fusion en 1. Tenga en cuenta que debe reiniciar su aplicación (use iisreset) para que los cambios surtan efecto.
Sugerencia: recuerde desactivar el registro de fusión cuando haya terminado, ya que hay una penalización de rendimiento al activarlo.
fuente
Es curioso que tuve un problema similar y no encontré nada adecuado y estaba al tanto del viejo Dependency Walker, así que al final escribí uno yo mismo.
Esto trata con .NET específicamente y mostrará qué referencias tiene (y faltan) un ensamblado de forma recursiva. También mostrará las dependencias de la biblioteca nativa.
Es gratis (para uso personal) y está disponible aquí para cualquier interesado: www.netdepends.com
Comentarios bienvenidos.
fuente
http://www.amberfish.net/
ChkAsm le mostrará todas las dependencias de un ensamblado en particular a la vez, incluidas las versiones, y le permitirá buscar fácilmente ensamblados en la lista. Funciona mucho mejor para este propósito que ILSpy ( http://ilspy.net/ ), que es lo que solía usar para esta tarea.
fuente
Otro útil complemento de Reflector que utilizo es la Matriz de estructura de dependencia . Es realmente genial ver qué clases usan qué. Además, es gratis.
fuente
Intente compilar su ensamblado .NET con la opción
--staticlink:"Namespace.Assembly"
. Esto obliga al compilador a extraer todas las dependencias en tiempo de compilación. Si encuentra una dependencia a la que no se hace referencia, dará una advertencia o un mensaje de error, generalmente con el nombre de ese ensamblado.Namespace.Assembly
es el ensamblado que sospecha que tiene el problema de dependencia. Por lo general, solo vincular estáticamente este ensamblado hará referencia a todas las dependencias de manera transitiva.fuente
La mejor aplicación que veo y uso, muestra dlls perdidos / problemáticos: http://www.dependencywalker.com/
fuente