Tenga en cuenta que Assembly.GetReferencedAssemblies
solo incluye un ensamblaje particular si realmente usa un tipo en ese ensamblaje en su ensamblaje (o un tipo que use depende de un tipo en ese ensamblaje). No es suficiente simplemente incluir un ensamblado en la lista de referencias en Visual Studio. Tal vez esto explica la diferencia en el rendimiento de lo que esperabas? Noto que si espera poder obtener todas las asambleas que están en la lista de referencias en Visual Studio usando la reflexión que es imposible; los metadatos para el ensamblaje no incluyen información sobre ensamblajes de los que no depende el ensamblaje determinado.
Dicho esto, una vez que haya recuperado una lista de todos los ensamblados de referencia algo como lo siguiente debe dejar enumerar sobre todos los tipos de esas asambleas:
foreach (var assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) {
Assembly assembly = Assembly.Load(assemblyName);
foreach (var type in assembly.GetTypes()) {
Console.WriteLine(type.Name);
}
}
Si necesita las asambleas que se hace referencia en Visual Studio, entonces tendrá que analizar el archivo csproj
. Para eso, consulte el elemento ItemGroup
que contiene Reference
elementos.
Finalmente, si usted sabe dónde vive un ensamblaje, puede cargarlo usando Assembly.LoadFile
y luego, básicamente, proceda como se indicó anteriormente para enumerar los tipos que viven en ese ensamblaje cargado.
¿Está tratando de inspeccionar un ensamblaje al que hace referencia el proyecto, o uno sentado en el sistema de archivos en alguna parte? – Amy
Sospecho que la implementación de CLR haría imposible obtener todos los tipos de todos los ensamblajes porque tendrían que compilarse justo a tiempo en un momento inoportuno, pero realmente no soy un experto en eso, por lo que solo debería hacerlo utiliza mi comentario como una pista para una mayor exploración. – zneak
@yodaj007 Montaje referenciado – AngryHacker