我的项目有2个DLL,一个是Android特定的,另一个是独立于平台的。独立DLL加载Android程序集并调用GetTypes方法,但它不返回所有公共类。 Android DLL有3个类,2个是静态的,只有静态方法。只有一个可以实例化。不返回静态类。
Class1.cs(在VS中编译为dll):
using System;
using System.Reflection;
namespace ClassLibrary1
{
public class Class1
{
public void test()
{
Assembly asm = Assembly.Load("ClassLibrary2");
Type T = asm.GetType("ClassLibrary2.Class2");
T.InvokeMember("Method", BindingFlags.Static | BindingFlags.InvokeMethod, null, T, null);
}
}
}
Class2.cs(在VS中编译为单独的dll):
namespace ClassLibrary2
{
public static class Class2
{
public static void Method()
{
return;
}
}
}
UnityClass.cs(分配给Unity 5.x中的空游戏对象):
using UnityEngine;
using System;
class UnityClass : MonoBehaviour
{
public void Start()
{
var x = new ClassLibrary1.Class1();
x.test();
}
}
答案 0 :(得分:0)
请参阅msdn中有关BindingFlags:
的以下说明您必须指定实例或静态以及公开或 NonPublic ,否则将不会返回任何成员。< / p>
如果您在通话中添加BindingFlags.Public
,则应该获得该会员。
在调用静态成员时,不需要第4个参数 target ,您不必将该类型作为目标传入,只需使用null。
作为最后一点,根据个人经验,我建议首先使用Type.GetMethod
,Type.GetField
,...而不是InvokeMember
来获取所需成员。这使您可以无效检查返回值以验证您是否找到了要搜索的成员。这对于调试以及在运行时抛出有意义的异常更好。