Если это .NET DLL Отражатель RedGate может перечислять методы и даже пытаться разобрать код. Это отличный элемент для любого инструментария разработчика, и он бесплатный
Редактировать: Если вы пытаетесь читать типы и методы во время выполнения, вам нужно использовать Reflection. Вы должны загрузить Assembly
и GetExportedTypes
. Затем выполните итерации по Members
до Methods
и Properties
. Вот статья из MSDN, в которой приведен пример перебора информации MemberInfo
. Кроме того, вот статья в журнале MSDN Magazine, Извлечение данных из сборок .NET .
Наконец, вот небольшой тестовый метод, который я написал для выполнения метода на загруженном объекте.
В этом примере ClassLibrary1 имеет один класс Class1:
public class Class1
{
public bool WasWorkDone { get; set; }
public void DoWork()
{
WasWorkDone = true;
}
}
А вот и тест:
[TestMethod]
public void CanExecute_On_LoadedClass1()
{
// Load Assembly and Types
var assm = Assembly.LoadFile(@"C:\Lib\ClassLibrary1.dll");
var types = assm.GetExportedTypes();
// Get object type informaiton
var class1 = types.FirstOrDefault(t => t.Name == "Class1");
Assert.IsNotNull(class1);
var wasWorkDone = class1.GetProperty("WasWorkDone");
Assert.IsNotNull(wasWorkDone);
var doWork = class1.GetMethod("DoWork");
Assert.IsNotNull(doWork);
// Create Object
var class1Instance = Activator.CreateInstance(class1.UnderlyingSystemType);
// Do Work
bool wasDoneBeforeInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);
doWork.Invoke(class1Instance, null);
bool wasDoneAfterInvoking =
(bool)wasWorkDone.GetValue(class1Instance, null);
// Assert
Assert.IsFalse(wasDoneBeforeInvoking);
Assert.IsTrue(wasDoneAfterInvoking);
}