在加载的程序集中找不到类型
本文关键字:集中 找不到 类型 程序集 程序 加载 | 更新日期: 2023-09-27 17:54:01
我的项目有两个dll,一个是Android特定的,另一个是独立于平台的。独立的DLL加载Android程序集并调用GetTypes方法,但它不返回所有的公共类。Android DLL有3个类,其中2个是静态的,只有静态方法。只能实例化一个。不返回静态类。
Class1.cs(编译dll在VS):
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中分配给一个空的GameObject):
using UnityEngine;
using System;
class UnityClass : MonoBehaviour
{
public void Start()
{
var x = new ClassLibrary1.Class1();
x.test();
}
}
查看msdn中关于BindingFlags的注释:
必须指定Instance或Static以及Public或NonPublic,否则不返回成员。
如果您将BindingFlags.Public
添加到您的呼叫中,您应该获得该成员。
第四个参数target在调用静态成员时是不需要的,您不必将类型作为target传递,只需使用null。
作为最后一个注意事项,根据个人经验,我建议首先使用Type.GetMethod
, Type.GetField
,…而不是使用InvokeMember
。这样就可以对返回值进行null检查,以验证是否找到了正在搜索的成员。这对于调试以及在运行时抛出有意义的异常更有利。