我用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文件加载托管程序集(另请参阅程序集加载的最佳实践)。