如何从加载的dll中获取对象
本文关键字:获取 取对象 dll 加载 | 更新日期: 2023-09-27 17:59:29
我在SO上看到了这个问题,我遵循了这个建议,但我似乎做错了什么。dll似乎加载正常,但CreateInstance返回的对象为null。
我有这个dll:
namespace Backfill
{
public class Module : Kernel.Module
{
public override void ModuleStart()
{
//Stuff
}
}
}
在另一个具有不同命名空间的DLL中
namespace Kernel
{
public abstract class Module
{
public abstract void ModuleStart();
}
public static void KernelStart()
{
string load_dll = @"Path to DLL";
Assembly test_dll = Assembly.LoadFile(load_dll + ".dll");
Module test_mod = (Module)test_dll.CreateInstance("Kernel.Module");
test_mod.ModuleStart();
}
}
不过,(Module)test_dll.CreateInstance("Kernel.Module");
正在返回null。知道为什么吗?
(Module)test_dll.CreateInstance("Kernel.Module")
这行不通。正如您所指定的,您试图实例化的Module
类(我认为它是来自第一个DLL的类)不在Kernel
命名空间中,而是在Backfill
命名空间中。因此,你应该有这样的东西:
(Module)test_dll.CreateInstance("Backfill.Module")
编辑:由于提供了更多信息:
@安东尼也有同样的答案。您需要直接指定所需的类型。BackFill.Module似乎是正确的。
编辑前:
如果在多个程序集中具有相同的名称,则需要为所需类型使用完全限定的名称(包括程序集名称)。对于exmaple:https://stackoverflow.com/a/2300428/30225作为一个可能的答案。