在 C# 中从 dll 加载特定类

Posted

技术标签:

【中文标题】在 C# 中从 dll 加载特定类【英文标题】:Load a Specific class from dll in C# 【发布时间】:2019-02-11 14:26:18 【问题描述】:

我只想从给定的 dll 中加载一些类。 问题如下:

我有以下 dll 文件。

DLL 1:

命名空间:

1 类 2 类

DLL 2:

命名空间:

2 类 3 级

如上面的示例所示,有可能并且很可能会发生我有 2 个甚至更多的 dll 中具有相同类的情况。 (注意命名空间是一样的)

现在我想到了以下几点:

在 Temp AppDomain 中打开一个 dll 检查哪些类我们不知道 将所需的类移至标准 Appdomain 卸载临时应用域

有什么办法可以做这样的事情吗?

【问题讨论】:

你问的是后期绑定吗?我有一个系统,我在后期绑定了一个 DLL(一个主 VB.net 项目,该项目后期从一个用 C# 编写的项目中绑定了一个 DLL),然后我们在该 DLL 中通过字符串名称调用一个函数来开始滚动(它是一个自动电话系统)。 这些 dll 是否在您的控制之下? @Fildor 每个 dll 都是由我完全控制的程序自动生成的 尝试使用extern alias 这个帖子可以帮助***.com/questions/3672920/… 你什么时候知道你需要哪个版本的冲突类(上面示例中的 Namespace.Class2)....直到运行时? 【参考方案1】:

您有两个不同的 dll 文件。因此,您可以将两个不同的 dll 文件导入您的 C# 项目。 例如第一个 dll 文件的名称是“File1”,第二个 dll 文件的名称是“File2”

const string file1_Dll_Path = @"File1.dll";
const string file2_DllPath = @"File2.dll";
[DllImport(file2_DllPath, CallingConvention = CallingConvention.Cdecl)]
    public static extern int YOURFUNCTIONINFILE2DLL();
[DllImport(file1_Dll_Path, CallingConvention = CallingConvention.Cdecl)]
    public static extern void YOURFUNCTIONINFILE1DLL();

注意:不要忘记在 C# 表单中添加“不安全”。像这样

unsafe public partial class FORMNAME : Form

【讨论】:

如果我知道我必须在构建时加载哪些类,这将有所帮助。但我只知道在运行时我需要哪些课程

以上是关于在 C# 中从 dll 加载特定类的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中从 C++ .DLL 加载值始终返回 true

如何在 Java 中从 C DLL 加载和使用结构和函数?

cv::VideoCapture 在 C# 项目中从 DLL 使用时不会打开文件或流

C#开发的OpenRA动态加载插件DLL里的类实现

C#开发的OpenRA动态加载插件DLL里的类实现

如何在 Python 中从 SXS 加载 C DLL?