从另一个 C# DotNet DLL 动态加载和调用 C# DotNet DLL

Posted

技术标签:

【中文标题】从另一个 C# DotNet DLL 动态加载和调用 C# DotNet DLL【英文标题】:Dynamic load and call of C# DotNet DLL from another C# DotNet DLL 【发布时间】:2018-12-14 00:35:13 【问题描述】:

我什至不知道我想做的事是否可能。我有两个 C# DotNet DLL:Parent.DLL 和 Child.DLL。两者都是使用 .NET Framework 4 使用 Visual Studio 2010 构建的。

Parent.DLL 使用 Child.DLL 中的例程。但是,在运行时,Parent.DLL 和 Child.DLL 将位于不同的目录中。

有没有办法让 Parent.DLL 在运行时动态加载和使用 Child.DLL?

我遇到this example 用于动态加载 DotNet DLL 的控制台应用程序,我正在尝试调整它以供 DotNet DLL 使用。但是,它需要的引用在添加到项目时无法识别:

using System.Runtime.Loader;

我正在尝试做的事情是否可能?我需要更高版本的 DotNet 吗?

【问题讨论】:

当然是。看看Assembly.Load()方法 CLR 已经非常擅长动态加载 DLL 而无需任何帮助。很难找到这样的 DLL 是一个非常糟糕的主意,您永远不会有意创建 DLL Hell。但是您可以使用 AppDomain.AssemblyResolve 事件。如果您打算创建一个插件架构(允许您不认识的人创建 DLL),那么情况就不同了,请务必在谷歌上搜索这些词以找到好的解决方案,前缀为“c#”。 【参考方案1】:

您正在寻找的短语是反射。 .NET 框架中的反射允许将 DLL 动态加载到调用程序集中,假设它们是在 .NET 框架中编写的并且您尝试调用的方法是公共的。 MSDN 上有很好的文档,正如前面提到的 here。

【讨论】:

以上是关于从另一个 C# DotNet DLL 动态加载和调用 C# DotNet DLL的主要内容,如果未能解决你的问题,请参考以下文章

C# 写一个动态加载DLL的程序 怎么写?

在 C# 中动态加载和使用 DLL

C#中如何动态加载和卸载DLL

DotNet:是不是可能将动态转换为接口类型

C#中动态加载和卸载DLL

C#动态加载dll 时程序集的卸载问题