4

我用 C# 编写了一个应用程序,并为它添加了一种 API。使用此 API,您可以将插件编写为 dll,它是一些接口规则的基础。

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

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

4

2 回答 2

4

您所描述的通常称为插件系统。搜索“使用 C# 创建插件系统”之类的内容可能会为您提供大量信息,如下所示:

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

基本思想是:

  • 定义您的程序实现的接口以允许插件从您的程序中获取信息。
  • 定义一个所有插件都将实现的接口,以允许您的程序调用插件的方法来做某事。
  • 将这些接口放在您的程序和任何插件 dll 引用的单独 dll 中。
  • 提供某种方式来查找具有实现插件接口的类型的 dll,例如 OpenFileDialog。
  • 加载 dll 并找到实现插件接口的类型(使用反射)。
  • 使用反射来实例化这些类型。
  • 酌情通过接口调用这些类型的方法。

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

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

您所说的非托管 dll 我将其称为动态加载的托管 dll。即它仍然是一个托管 dll(以 .net 语言编码),但在程序已经运行之前不会加载。

于 2012-09-24T15:22:29.347 回答
1

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

于 2012-09-24T15:58:41.980 回答