El siguiente método C# mostrará una lista de todos los tipos identificables que se encuentran en un determinado ensamblaje. (Espacios de nombres utilizadas: Sistema, System.Collections.Generic, System.IO, System.Reflection)
static void PrintDisposableTypesFromFile(String path)
{
Assembly assembly = Assembly.LoadFrom(path);
foreach (Type type in assembly.GetTypes())
if (type.GetInterface("IDisposable") != null)
Console.WriteLine(type.FullName);
}
El siguiente método C# hace uso de la anterior para hacer lo mismo para todos los conjuntos en un directorio y sus subdirectorios , p.ej "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727":
static void PrintDisposableTypesFromDirectory(DirectoryInfo dir, bool warn)
{
foreach (FileInfo file in dir.GetFiles("*.dll"))
{
try
{
PrintDisposableTypesFromFile(file.FullName);
}
catch (Exception ex)
{
if (warn)
{
Console.Error.WriteLine(
String.Format(
"WARNING: Skipped {0}: {1}",
new object[] { file.FullName, ex.Message }));
}
}
}
// recurse
foreach (DirectoryInfo subdir in dir.GetDirectories())
PrintDisposableTypesFromDirectory(subdir, warn);
}
No estoy seguro de la lista de todos los desechables es muy útil, pero yo he utilizado un código similar para encontrar otras cosas interesantes como la lista completa de codificaciones de texto compatibles con .NET framework.
¿Por qué tendrías que llamar a la conexión?Cerrar() antes del corchete final No sé si hay muchas otras piezas en el rompecabezas. –
¿Por qué una lista? Puede verificar fácilmente si un objeto implementa IDisposable. – Groo
@Groo: Realmente tiene que verificar los documentos, algunos tipos ocultan el Dispose(). Entonces no es tan fácil. –