我有两个dll文件让我们说DataLayer.dll和ProcessLayer.dll。 DataLayer.dll有一个名为MyClass的类,如下所示:
public class MyClass
{
public string name;
public int age;
public string aadhar;
}
我在第二个程序集ProcessLayer.dll中引用了DataLayer.dll,它有一个输入参数为MyClass的方法。
using DataLayer;
namespace ProcessLayer
{
public class Process
{
public int GetMyClass(MyClass objMy)
{
return objMy.age;
}
}
}
如何使用反射从ProcessLayer.dll
读取所有方法参数?我正在使用
Assembly assembly = Assembly.LoadFile(@"C:\ProcessLayer.dll");
foreach (Type _type in assembly.GetTypes())
{
foreach (var method in _type.GetMethods())
{
var parameters = method.GetParameters();
}
}
并在尝试执行method.GetParameters();
语句时出错。
你能帮帮我吗?
如何使用Mono.cecil获取它?
答案 0 :(得分:1)
您需要加载程序集,然后获取类型,然后获取您所使用的类型的方法。
var myAssembly Assembly.LoadFrom(@"..\ProcessLayer.dll");
var myAssemblyTypes = myAssembly.GetTypes();
var firstType = myAssemblyTypes[0];
var firstTypeMethods = firstType.GetMethods();
var firstTypeFirstMethod = firstTypeMethods[0];
var params = firstTypeFirstMethod.GetParameters();
如果你需要来自另一个程序集的类型,那么你可以加载它,你可能也需要实例化它。
Assembly assembly = Assembly.LoadFrom("Assembly.LoadFile(@"..\DataLayer.dll");
Type missingType = assembly.GetType(<your missing type>);
var createTypeInstance = Activator.CreateInstance(missingType);