gpt4 book ai didi

c# - 动态加载程序集的应用程序配置

转载 作者:可可西里 更新时间:2023-11-01 08:21:00 27 4
gpt4 key购买 nike

我正在尝试将模块动态加载到我的应用程序中,但我想为每个模块指定单独的 app.config 文件。

假设我有以下主应用程序的 app.config 设置:

<appSettings>
<add key="House" value="Stark"/>
<add key="Motto" value="Winter is coming."/>
</appSettings>

还有一个用于我使用 Assembly.LoadFrom 加载的库:

<appSettings>
<add key="House" value="Lannister"/>
<add key="Motto" value="Hear me roar!"/>
</appSettings>

两个库都有一个实现相同接口(interface)的类,方法如下:

public string Name
{
get { return ConfigurationManager.AppSettings["House"]; }
}

并且确实从主类和加载的程序集类输出 Stark 调用了 Name

有没有办法让主应用程序使用自己的 app.config 而每个加载的程序集都使用它们的?配置文件的名称在输出中不同,所以我认为这应该是可能的。

最佳答案

好的,这是我最终得到的简单解决方案:在实用程序库中创建以下函数:

public static Configuration LoadConfig()
{
Assembly currentAssembly = Assembly.GetCallingAssembly();
return ConfigurationManager.OpenExeConfiguration(currentAssembly.Location);
}

像这样在动态加载的库中使用它:

private static readonly Configuration Config = ConfigHelpers.LoadConfig();

无论该库是如何加载的,它都使用正确的配置文件。

编辑:这可能是将文件加载到 ASP.NET 应用程序的更好解决方案:

public static Configuration LoadConfig()
{
Assembly currentAssembly = Assembly.GetCallingAssembly();
string configPath = new Uri(currentAssembly.CodeBase).LocalPath;
return ConfigurationManager.OpenExeConfiguration(configPath);
}

要在构建后复制文件,您可能需要将以下行添加到 asp 应用程序的构建后事件(从库中提取配置):

copy "$(SolutionDir)<YourLibProjectName>\$(OutDir)$(Configuration)\<YourLibProjectName>.dll.config" "$(ProjectDir)$(OutDir)"

关于c# - 动态加载程序集的应用程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993546/

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