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

前端之家收集整理的这篇文章主要介绍了c# – 动态加载程序集的应用程序配置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将模块加载到我的应用程序中,但是我想为每个应用程序指定单独的app.config文件.

说我有以下app.config设置为主应用程序:

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

另一个用于使用Assembly.LoadFrom加载的库:

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

两个库都有一个类实现相同的接口,具有以下方法

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

并且肯定有足够的调用来自主类和加载的汇编类输出Stark.

有没有办法使主应用程序使用自己的app.config和每个加载的程序集使用他们的?配置文件名称输出中是不同的,所以应该可以我想.

解决方法

好的,这是我最终的简单解决方案:
在实用程序库中创建跟随函数
public static Configuration LoadConfig()
{
    Assembly currentAssembly = Assembly.GetCallingAssembly();
    return ConfigurationManager.OpenExeConfiguration(currentAssembly.Location);
}@H_403_5@ 
 

在动态加载的库中使用它,如下所示:

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

无论如何加载它,它使用正确的配置文件.

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

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

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

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

猜你在找的C#相关文章