Assembly.LoadFrom 和依赖项

2024-01-09

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

我有一个由 .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));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Assembly.LoadFrom 和依赖项 的相关文章

随机推荐