gpt4 book ai didi

.net - MEF 导出程序集中的自定义配置部分

转载 作者:行者123 更新时间:2023-12-04 15:04:10 25 4
gpt4 key购买 nike

我有一个程序集,其中包含从不同程序集中导入许多类的类,这些类在编译时未引用,但在运行时通过目录目录发现。导出类想要为导入程序集的宿主应用程序中的配置文件定义自定义配置节。但是,由于导入程序集的宿主应用程序在编译时不知道导出程序集,因此无法加载程序集以使用其中的自定义节处理程序实现。

我发现解决此问题的一种方法是将导出程序集与导入程序集的宿主应用程序程序集放在同一文件夹中。但我想允许其他开发人员配置他们想要保存导出程序集的任何文件夹。

我可以做的一件事是在启动时将开发人员配置的文件夹的内容复制到主机的文件夹中。但如果可以的话,我宁愿避免那些额外的移动部件和代码来维护。有没有更好的方法来解决这个问题?在查找定义自定义配置部分的程序集时,有没有办法将应用程序指向其他目录?

最佳答案

我在使用 StructureMap 动态发现程序集时遇到了同样的问题。 ConfigurationManager 似乎只在 Bin-Folder 和 GAC 中寻找 ConfigurationSection 的指定程序集。即使将程序集加载到当前 AppDomain 中,它似乎也不起作用。

但事实上,ConfigurationSection 的程序集已经加载可用于一个简单的解决方法:

AppDomain.CurrentDomain.AssemblyResolve += (o, args) =>
{
var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
return loadedAssemblies.FirstOrDefault(asm => asm.FullName == args.Name);
};

每当 CLR 找不到某个程序集时,就会触发 AssemblyResolve-Event。只需确保在第一次调用 GetSection() 之前注册回调。

为我工作。

关于.net - MEF 导出程序集中的自定义配置部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4845801/

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