¿Cómo obtengo las rutas de acceso de todos los ensamblados a los que hace referencia el ensamblaje que se está ejecutando actualmente? GetReferencedAssmblies()
me da el AssemblyName[]
s. ¿Cómo llego desde donde están cargados?Obtener las rutas de acceso de todos los ensamblados a los que se hace referencia
Respuesta
No se puede saber hasta que se carga el ensamblado. El algoritmo de resolución de ensamblaje es complicado y no se puede adivinar de antemano lo que hará. Llamar a la anulación Assembly.Load(AssemblyName)
le dará una referencia al ensamblaje, y su propiedad Location le dice lo que necesita.
Sin embargo, realmente no quiere cargar ensamblados por adelantado, antes de el compilador JIT lo hace. Es ineficiente y la probabilidad de problemas no es cero. Por ejemplo, podría iniciar un evento AppDomain.AssemblyResolve
antes de que el programa esté listo para responderlo. Evita hacer esta pregunta.
Muchas gracias por la respuesta correcta. –
La propiedad CodeBase
debe proporcionar el nombre completo de la ruta.
¿Lo has probado? –
Desafortunadamente, CodeBase devuelve nulo en cada ensamblado al que se hace referencia. :-) –
Usted puede obtener la ubicación URL del conjunto de la siguiente manera:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()[0].CodeBase
CodeBase devuelve nulo. La solución está en la publicación a la que se vinculó JasonEvans en su comentario a la publicación original. Además, Hans Passant también tiene la respuesta correcta. –
Siguiendo la respuesta de Hans Passant, y dado que la propiedad CodeBase
siempre contenía null
, se me ocurrió esto. Es posible que no encuentre todos los ensamblajes, ya que es posible que no estén todos cargados. En mi situación, tuve que encontrar todas las referencias de un montaje cargado previamente, por lo que funcionó bien:
IEnumerable<string> GetAssemblyFiles(Assembly assembly)
{
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var assemblyName in assembly.GetReferencedAssemblies())
yield return loadedAssemblies.SingleOrDefault(a => a.FullName == assemblyName.FullName)?.Location;
}
Uso:
var assemblyFiles = GetAssemblyFiles(typeof(MyClass).Assembly);
- 1. Reglas de los ensamblados a los que se hace referencia copia
- 2. La vista basada en navaja no muestra los ensamblados a los que se hace referencia
- 3. Obtener rutas de ensamblados utilizadas en Tipo
- 4. ¿Hay alguna manera de forzar que todos los ensamblados a los que se hace referencia se carguen en el dominio de la aplicación?
- 5. Lista de todos los ensamblados .NET
- 6. ¿Por qué (a veces) tengo que hacer referencia a los ensamblados a los que hace referencia el ensamblaje al que hago referencia?
- 7. GetReferencedAssemblies no devuelve todos los ensamblados
- 8. Eliminación de todos los registros de una tabla que no se hace referencia a otra tabla
- 9. ¿Cómo obtener todos los tipos en un conjunto al que se hace referencia?
- 10. Acceso a las rutas de los raíles en javascript
- 11. ¿Puede heredar Visual Studio 2010 C++ la ruta de acceso de los proyectos a los que se hace referencia?
- 12. Referencia circular entre los dos ensamblados .NET
- 13. Cómo eliminar una rama y todos los objetos a los que hace referencia
- 14. ¿Se deben firmar los ensamblados de interoperabilidad?
- 15. Obtener rutas absolutas de todos los archivos en un directorio
- 16. ¿Cómo y cuándo se toman las variables a las que se hace referencia en los métodos anónimos de Delphi?
- 17. AssemblyLoadException en postsharp, ¿problema con los argumentos de los archivos DLL a los que se hace referencia?
- 18. C# CompileAssemblyFromSource, agregue los ensamblados referenciados que necesita?
- 19. Obtener todos los elementos de un ArrayAdapter
- 20. Determine los ensamblados cargados
- 21. Adición de frascos que se hace referencia a Android build.xml
- 22. ayuda con TFS y archivos DLL a los que se hace referencia
- 23. Cómo trabajar con proyectos a los que se hace referencia en eclipse
- 24. ADFS v2.0: Encontrar errores a los que hace referencia el número de referencia
- 25. ¿Cómo se hace referencia a las variables locales en los cierres?
- 26. ¿Por qué los tipos a los que se hace referencia fuera de un espacio de nombres deben estar totalmente calificados?
- 27. TeamCity no copia todas las bibliotecas a las que se hace referencia
- 28. ¿Pueden las Vistas MVC acceder a todos los proyectos aunque el proyecto donde se ven las vistas no los hace referencia?
- 29. WeakHashMap y caché de Java: ¿Por qué hace referencia a las claves, no a los valores?
- 30. Rutas rutas que coinciden con los parámetros de consulta
probar este http://stackoverflow.com/questions/1582510/ get-pathes-of-assemblies-used-in-type –
Muchas gracias. Eso lo resolvió para mí. –
Para obtener un ejemplo completo de cómo obtener todos los ensamblados a los que se hace referencia, de forma recursiva, consulte http://stackoverflow.com/questions/383686/how-do-you-loop-through-currently-loaded-assemblies/26300241#26300241. – Contango