加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:20:24 所属栏目:百科 来源:网络整理
导读:我正在尝试将模块加载到我的应用程序中,但是我想为每个应用程序指定单独的app.config文件. 说我有以下app.config设置为主应用程序: appSettings add key="House" value="Stark"/ add key="Motto" value="Winter is coming."//appSettings 另一个用于使用Ass
我正在尝试将模块加载到我的应用程序中,但是我想为每个应用程序指定单独的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>

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

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

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

有没有办法使主应用程序使用自己的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)"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读