在 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 加载特定类的主要内容,如果未能解决你的问题,请参考以下文章