【问题标题】:loading dll at run time in .Net and create a class在.Net中运行时加载dll并创建一个类
【发布时间】:2013-04-16 06:54:31
【问题描述】:

我想在运行时从另一个应用程序加载一个 dll,但同时,我需要创建一个在 dll 中实现的类的实例。能做到吗?我可以在运行时加载 dll,并且有一些示例,但是我如何在没有加载 dll 的情况下调用一个类?不会编译,对吧?

【问题讨论】:

标签: .net c#-4.0


【解决方案1】:

您可以在运行时加载 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" });

【讨论】:

  • 谢谢。你会如何调用新对象的属性?不能使用object.MyProperty,对吧?
  • 当然可以和下面的调用方法一样。只需使用 GetProperties
  • 还有一个问题,如果正在加载的dll需要另一个dll,我可以同时加载多个dll吗?它似乎不起作用....
  • 如果该 dll 在同一目录中,它应该会自动找到它。如果它没有查看您当前 AppDomain 的 basedir。
【解决方案2】:

它会编译。最简单的方法是与您的应用程序和加载的 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...);   

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2013-03-13
    • 1970-01-01
    • 2021-05-19
    • 2020-09-24
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多