【发布时间】:2013-04-16 06:54:31
【问题描述】:
我想在运行时从另一个应用程序加载一个 dll,但同时,我需要创建一个在 dll 中实现的类的实例。能做到吗?我可以在运行时加载 dll,并且有一些示例,但是我如何在没有加载 dll 的情况下调用一个类?不会编译,对吧?
【问题讨论】:
我想在运行时从另一个应用程序加载一个 dll,但同时,我需要创建一个在 dll 中实现的类的实例。能做到吗?我可以在运行时加载 dll,并且有一些示例,但是我如何在没有加载 dll 的情况下调用一个类?不会编译,对吧?
【问题讨论】:
您可以在运行时加载 dll。
像这样:
//load assembly
var ass = Assembly.LoadFile("ADll.dll");
//get types from assemblt
var typesInAssembly = ass.GetTypes();
var type = typesInAssembly.First(/*select one*/);
//create instance
var object = Activator.CreateInstance(type, new object [] { "arguments" });
【讨论】:
AppDomain 的 basedir。
它会编译。最简单的方法是与您的应用程序和加载的 dll 具有通用接口。你可以在这里找到这样做的热门:C# - Correct Way to Load Assembly, Find Class and Call Run() Method。
但是如果你没有通用接口你仍然可以CreateInstance,然后找到你需要的所有方法(下面的例子是所有方法):
MethodInfo[] methodInfos = Type.GetType(selectedObjcClass) .GetMethods(BindingFlags.Public | BindingFlags.Instance);
然后像这样使用Invoke 调用选定的一个:
method.Invoke(selectedObjcClass, params...);
【讨论】: