que descargar c# .net-assembly assemblies

que - assembly c# descargar



Averigüe las dependencias de todas las DLL? (6)

Tengo una colección de archivos DLL (digamos 20). ¿Cómo averiguo todas las DLL de las que depende una DLL específica (digamos DLL A)?


Como la pregunta está etiquetada como "C #", supongo que está hablando de dlls gestionados (ensamblados). En ese caso, dependencywalker no es útil. Si quieres hacer eso con un programa, los buenos son dotPeek de JetBrians y Reflector de RedGate. O incluso puede usar el inspector de objetos en Visual Studio.

Sin embargo, puede ser un proceso largo y engorroso también. Escribiría un script corto de C # / F # que usa Assembly.GetReferencedAssemblies , como mencionó Jon.

Si, por el contrario, desea examinar las dependencias nativas de las DLL con un programa (código C #), debe examinar el archivo PE (el formato de archivo MS dll y exe) y su IAT (tabla de direcciones de importación). No es fácil, pero no imposible ...

Comenzaría aquí en MSDN y here para entender las secciones PE, y usaré una biblioteca administrada para leerla (hay muchas, incluso algunas del proyecto Mono (estoy pensando en Cecil , debería funcionar también con binarios nativos); el pasado lo he usado del buen John Gough.


Para los ensamblados .NET, una excelente herramienta para ver los ensambles de los que depende un ensamble es AsmSpy .


Puede usar el cazador de dependencias http://www.dependencywalker.com para resolver esto. Sin embargo, tome nota de la diferencia entre x32 y x64.

Dependency Walker es una utilidad gratuita que escanea cualquier módulo de Windows de 32 bits o 64 bits (exe, dll, ocx, sys, etc.) y crea un diagrama de árbol jerárquico de todos los módulos dependientes.


Si desea las DLL (los archivos), Assembly.GetReferencedAssemblies también devolverá los ensamblados de .Net Framework.

Aquí hay un fragmento de código simple que obtendrá el dll que puede encontrar en el directorio actual (y también incluye algunos otros archivos relacionados):

private readonly string[] _extensions = { ".dll", ".exe", ".pdb", ".dll.config", ".exe.config" }; private string[] GetDependentFiles(Assembly assembly) { AssemblyName[] asm = assembly.GetReferencedAssemblies(); List<string> paths = new List<string>(asm.Length); for (int t = asm.Length - 1; t >= 0; t--) { for (int e = _extensions.Length - 1; e >= 0; e--) { string path = Path.GetFullPath(asm[t].Name + _extensions[e]); if (File.Exists(path)) paths.Add(path); } } return paths.ToArray(); }

Puede llamarlo así: MessageBox.Show(string.Join("/r/n", GetDependentFiles(Assembly.GetEntryAssembly())));


Todo el crédito de respuesta va a los autores anteriores para el uso de Assembly.GetReferencedAssemblies . Esta es solo una aplicación de consola C # de escritura y olvido que funciona únicamente para ensamblados .NET. return 0 en ensamblajes que pudo verificar, y cuando tiene éxito, los envía a STDOUT. Todo lo demás return 1 e imprimirá algún tipo de salida de error. Puedes agarrar la esencia here .

using System; using System.Reflection; using System.IO; namespace DotNetInspectorGadget { class DotNetInspectorGadget { static int Main(string[] args) { if(args.GetLength(0) < 1) { Console.WriteLine("Add a single parameter that is your" + " path to the file you want inspected."); return 1; } try { var assemblies = Assembly.LoadFile(@args[0]).GetReferencedAssemblies(); if (assemblies.GetLength(0) > 0) { foreach (var assembly in assemblies) { Console.WriteLine(assembly); } return 0; } } catch(Exception e) { Console.WriteLine("An exception occurred: {0}", e.Message); return 1; } finally{} return 1; } } }

Uso:

call %cd%/dotnet_inspector_gadget.exe C:/Windows/Microsoft.NET/assembly/GAC_64/Microsoft.ConfigCI.Commands/v4.0_10.0.0.0__31bf3856ad364e35/Microsoft.ConfigCI.Commands.dll

Salida:

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a


Si quiere decir programáticamente, use Assembly.GetReferencedAssemblies .

Puede usarlo recursivamente para encontrar todos los ensambles que necesita. (Entonces encuentra las dependencias de X, luego las dependencias de las dependencias, etc.)