Estoy haciendo una carga de ensamblaje en tiempo de ejecución, pero no sé los nombres de ninguna clase o método. Quiero enumerar todas las clases en mi ensamblado con sus métodos declarados, no los heredados de System.Object.¿Cómo encuentro solo los métodos declarados al realizar una carga de ensamblaje en tiempo de ejecución?
Este es el código:
string str = "";
Assembly assembly = Assembly.LoadFile(@"c:\components.dll");
foreach (Type type in assembly.GetTypes())
{
if (type.IsClass == true)
{
str += type.Name + "\n";
MethodInfo[] methodInfo = type.GetMethods(BindingFlags.DeclaredOnly);
foreach (MethodInfo mi in methodInfo)
{
str += "\t" + mi.Name + "\n";
}
}
}
MessageBox.Show(str);
Ésta es la components.dll:
public class component01
{
public string myName = "component01";
public string getMyName()
{
return myName;
}
}
public class component02
{
public string myName = "component02";
public string getMyName()
{
return myName;
}
}
El resultado:
component01
component02
And if i remove the bindingflag:
component01
getMyName
ToString
Equals
GetHashcode
GetType
component02
getMyName
ToString
Equals
GetHashcode
GetType
que sólo quieren el método getMyName
muestra.
Funciona perfectamente, gracias! Intenté usar Public y DeclaredOnly anteriormente, pero esto no funcionó. ¿Cómo es que necesito especificar los tres? – Bildsoe
@Bildsoe: 'System.Reflection.BindingFlags' es un flags-enum. Cuando el indicador 'Instance' no está configurado,' GetMethods' no incluye métodos de instancia. – Ani
bien, gracias. Solo pensé que, si el método fuera uno de los mencionados, se incluiría. – Bildsoe