1

我有两个 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 获得它有什么想法吗?

4

1 回答 1

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);
于 2016-06-06T13:28:38.530 回答