我试图在运行时简单地加载一个用C#编写的dll,并在该dll中创建一个类的实例.
Assembly a = Assembly.LoadFrom(@"C:\Development\DaDll.dll");
Type type = a.GetType("FileReleaseHandler", true);
TestInterface.INeeedHelp handler = Activator.CreateInstance(type) as TestInterface.INeeedHelp;
Run Code Online (Sandbox Code Playgroud)
不会抛出任何错误,如果我单步执行代码,我可以通过FileReleaseHandler类来执行构造函数,但处理程序的值始终为null.
我在这里错过了什么?或者甚至是否有更好的方法来解决这个问题?
在哪里TestInterface.INeedHelp定义的?一个常见的问题是,如果多个程序集中具有相同的接口。如果调用者和动态加载的程序集都引用同一程序集中的相同接口,则应该没问题。
一个微妙之处是,如果程序集与调用程序集位于不同的目录中,则最终可能会加载同一程序集的不同副本,这可能非常令人恼火:(