我正在尝试将模块加载到我的应用程序中,但是我想为每个应用程序指定单独的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@有没有办法使主应用程序使用自己的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@