gpt4 book ai didi

c# - 在运行时动态更改对 dll 的引用

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:23 26 4
gpt4 key购买 nike

我有这样的情况,我在不同的文件夹中有几个 .dll 文件,它们都具有相同的名称,包含相同的函数(具有相同的名称),但具有相同名称的函数中的代码是不同的。

我在设计中创建了我的应用程序,引用了这些 .dll 文件之一。但我希望当我的应用程序启动时,使用选择案例能够更改对这些 dll 之一的引用。

这可能吗?

谢谢!

最佳答案

你不能那样做,如果你想使用你在运行时选择的 dll,你需要首先不在你的项目中直接引用它(在运行时不能改变)然后手动加载它您的 appdomain 使用 Assembly.Load 并反射(reflect)它以使用它的类型(因为您在编译时不知道类型,因为它没有被引用,所以您必须针对您查询的类型对其进行编程)。

因此,如果您已经针对引用的 dll 进行编程,那么您做错了,因为如果您需要它是动态的,那么使用其中代码的整个方式是不同的。

例如,如果您在名为“mydll.dll”的 dll 中有一个类型“mytype”和一个方法“mymethod”,如果您引用它,使用它就像做一样简单

new mytype().mymethod();

如果您没有引用 dll 而是动态解析它,它看起来像

var asm = Assembly.Load("mydll.dll");
var type = asm.DefinedTypes.Single(t=>t.Name == "mytype");
var instance = Activator.CreateInstance(type);
var methodinfo = type.GetMethod("mymethod");
methodinfo.Invoke(instance);

我们还需要知道您想要实现什么,有一些方法可以使它更简单一些,但这取决于您的用例(例如,在插件系统中,您可以为插件声明一个接口(interface)并共享该 dll 并直接引用它,仅动态加载插件,因此您可以直接将实例转换为该接口(interface),而不必动态调用方法)

关于c# - 在运行时动态更改对 dll 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420223/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com