gpt4 book ai didi

c# - Assembly.LoadFrom 和依赖项

转载 作者:行者123 更新时间:2023-11-30 22:04:45 24 4
gpt4 key购买 nike

我一直在尝试使用 Assembly.LoadFrom() 设置插件系统,该插件系统动态加载 .exe 目录的子文件夹中的 dll。

我有一个接口(interface)库被 .exe 和插件引用。构建完成后,我将插件 dll 复制到子文件夹。

不同的插件可能有共同的库,所以我想在 .exe 旁边收集这些依赖项。

我的理解是我必须使用 AssemblyResolve 事件从 exe 目录手动加载插件依赖项。它是否正确 ?因为它看起来很笨重。

最佳答案

在您的情况下,您有两种可能的情况:

1- 你的 Exe 和你的插件共享一个引用:在这种情况下,共享引用已经被 Exe 加载,你不需要担心加载它。即使您尝试再次加载它,因为它已经存在于已加载的程序集中,它也不会再次加载。

2- 您的 Exe 没有引用插件引用的库。在这种情况下,如果库程序集存在于您的子文件夹中并且您使用 LoadFrom,它应该会尝试为您加载相关程序集。现在,虽然您的应用程序启动路径是 Exe 的目录,但我认为如果您有从插件到库的直接引用,程序集解析不会失败。但是,如果由于某种原因确实失败了,.Net 框架有 AssemblyResolve 来帮助您。您只需订阅该事件并让它搜索库的正确路径(子文件夹)。

其实并不麻烦。它只是订阅一个事件。像这样:

private static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
{
//The name would contain versioning and other information. Let's say you want to load by name.
string dllName = e.Name.Split(new[] { ',' })[0] + ".dll";
return Assembly.LoadFrom(Path.Combine([AssemblyDirectory], dllName));
}

关于c# - Assembly.LoadFrom 和依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24956949/

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