by Misael Monterroca
21. May 2010 14:13
Para un documento de arquitectura que estoy elaborando, me vi en la necesidad de obtener los namespaces y los tipos de un determinado ensamblado, el siguiente código les permitirá obtenerlos utilizando reflection y escribirlos en un archivo de texto.
La aplicación leerá los ensamblados que se encuentren dentro de un directorio dejando un archivo llamado datos.txt que tendrá un contenido similar al siguiente:
Para el ensamblado Contoso.SN.Framework
NAMESPACES
Contoso.SN.Framework
Contoso.SN.Framework.Exceptions
Contoso.Sacip.Framework.Infopath
……..
CLASES
ConfigurationException
ConfigurationSettings
……
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DirectoryInfo directory = new DirectoryInfo(@"C:\dlls");
var dls = directory.GetFiles("*.dll");
if (File.Exists("datos.txt"))
File.Delete("datos.txt");
using (StreamWriter writer = File.CreateText("datos.txt"))
{
foreach (var item in dls)
{
var assembly = Assembly.LoadFrom(item.FullName);
Console.WriteLine("Para el ensamblado " + assembly.GetName().Name);
writer.WriteLine("Para el ensamblado " + assembly.GetName().Name);
writer.WriteLine("NAMESPACES ");
writer.WriteLine();
var namespaces = assembly.GetTypes().Select(T => T.Namespace).Distinct();
foreach (var type in namespaces)
{
Console.WriteLine(type);
writer.WriteLine(type);
}
writer.WriteLine();
writer.WriteLine();
writer.WriteLine("Tipos ");
var types = assembly.GetTypes().OrderBy(T => T.Name);
foreach (var type in types)
{
if(!type.IsNested)
writer.WriteLine(type.Name);
}
writer.WriteLine();
writer.WriteLine();
}
}
Console.ReadKey();
}
}
}
66315053-56e5-42ca-8d91-47badd603144|0|.0
Tags: