如何在c#中处理动态加载的托管库



我用C#编写了一个应用程序,并为它添加了一种API。有了这个API,你可以把插件写成dll,这是一些接口规则的基础。

我想通过OpenFileDialog打开dll文件并使用其内容。我的API是一个托管库,所以我只添加了一个引用,但我想在不知道dll文件名的情况下使用dll。此外,命名空间是另一个每个库。

如何加载dll并在其中运行代码?

您所描述的通常被称为插件系统。在谷歌上搜索类似"使用C#创建插件系统"的内容可能会给你很多信息,比如以下信息:

http://www.codeproject.com/Articles/4691/Plugin-Architecture-using-C

基本思想是:

  • 定义程序实现的接口,以允许插件从程序中获取信息
  • 定义一个所有插件都将实现的接口,以允许您的程序调用插件的方法
  • 将这些接口放在一个单独的dll中,该dll由您的程序和任何插件dll引用
  • 提供一些方法来查找具有实现插件接口的类型的dll,例如OpenFileDialog
  • 加载dll并查找实现插件接口的类型(使用反射)
  • 使用反射标记这些类型
  • 根据需要,通过接口调用这些类型上的方法

关于托管/非托管。托管DLL是使用.net托管运行时构建/编码的DLL。这将是用诸如c之类的.net语言编码的东西。

非托管dll或多或少是用不同语言编码的任何东西。

你所说的非托管dll我指的是动态加载的托管dll。也就是说,它仍然是一个托管dll(用.net语言编码),但在程序运行之前不会加载。

您可以使用assembly.LoadFrom方法(字符串)从dll文件加载托管程序集(另请参阅程序集加载的最佳实践)。

相关内容

  • 没有找到相关文章

最新更新