Gro*_*ozz 12 c# reflection app-config
我正在尝试动态地将模块加载到我的应用程序中,但我想为每个模块指定单独的app.config文件.
假设我有以下主应用程序的app.config设置:
<appSettings>
<add key="House" value="Stark"/>
<add key="Motto" value="Winter is coming."/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
另一个用于我加载的库Assembly.LoadFrom:
<appSettings>
<add key="House" value="Lannister"/>
<add key="Motto" value="Hear me roar!"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
两个库都有一个实现相同接口的类,具有以下方法:
public string Name
{
get { return ConfigurationManager.AppSettings["House"]; }
}
Run Code Online (Sandbox Code Playgroud)
确实Name从主类和加载的汇编类输出调用Stark.
有没有办法让主应用程序使用自己的app.config和每个加载的程序集使用他们的?配置文件的名称在输出中是不同的,所以我认为这应该是可能的.
Gro*_*ozz 13
好的,这是我最终得到的简单解决方案:在实用程序库中创建follow函数:
public static Configuration LoadConfig()
{
Assembly currentAssembly = Assembly.GetCallingAssembly();
return ConfigurationManager.OpenExeConfiguration(currentAssembly.Location);
}
Run Code Online (Sandbox Code Playgroud)
在动态加载的库中使用它,如下所示:
private static readonly Configuration Config = ConfigHelpers.LoadConfig();
Run Code Online (Sandbox Code Playgroud)
无论如何加载该库,它都使用正确的配置文件.
编辑: 这可能是将文件加载到ASP.NET应用程序的更好解决方案:
public static Configuration LoadConfig()
{
Assembly currentAssembly = Assembly.GetCallingAssembly();
string configPath = new Uri(currentAssembly.CodeBase).LocalPath;
return ConfigurationManager.OpenExeConfiguration(configPath);
}
Run Code Online (Sandbox Code Playgroud)
要在构建后复制文件,您可能需要将以下行添加到asp app的后期构建事件中(从库中提取配置):
copy "$(SolutionDir)<YourLibProjectName>\$(OutDir)$(Configuration)\<YourLibProjectName>.dll.config" "$(ProjectDir)$(OutDir)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15544 次 |
| 最近记录: |