如何从程序集配置文件中检索AppSettings?

时间:2009-11-05 17:01:59

标签: c# .net app-config

我想从名为MyAssembly.dll.config的程序集配置文件中检索AppSetting项。以下是配置文件的示例:

<configuration>
    <appSettings>
        <add key="MyKey" value="MyVal"/>
    </appSettings>
</configuration>

以下是检索它的代码:

var myKey = ConfigurationManager.AppSettings["MyKey"];

5 个答案:

答案 0 :(得分:23)

使用OpenMappedExeConfiguration会返回一个“配置”对象,您可以使用该对象查看类库的配置(其中存在的设置将覆盖主应用程序配置中相同名称的设置) :

ExeConfigurationFileMap map = new ExeConfigurationFileMap();
map.ExeConfigFilename = "ConfigLibrary.config";

Configuration libConfig = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

AppSettingsSection section = (libConfig.GetSection("appSettings") as AppSettingsSection);
value = section.Settings["Test"].Value;

但是那些主应用程序配置所独有但在类库自己的配置中不存在的设置仍然可以通过ConfigurationManager静态类访问:

string serial = ConfigurationManager.AppSettings [“Serial”];

仍然有效 - 类库的配置只隐藏其配置文件中的那些设置;此外,您还需要使用“libConfig实例来访问类库自己的配置设置。

两个世界(主app.config,classlibrary.config)可以完全和非常愉快地共存 - 根本不存在问题!

马克

答案 1 :(得分:6)

var appSettings = ConfigurationManager.OpenExeConfiguration((Assembly.GetAssembly(typeof(MYASSEMBLY))).Location).AppSettings;

然后你就可以这样做了。

答案 2 :(得分:0)

var uri = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase));
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = Path.Combine(uri.LocalPath, "MyAssembly.dll.config") };
var assemblyConfig = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

答案 3 :(得分:0)

您也可以将其打开为XmlDocument并使用Xpath导航文档。总是LinqToXml

答案 4 :(得分:-1)

Using System.Configuration
Public Shared Function AppDomainConfiguration() As Configuration
  Dim fileMap As New ExeConfigurationFileMap
  fileMap.ExeConfigFilename = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
  Return ConfigurationManager.OpenMappedExeConfiguration(fileMap,Configuration.ConfigurationUserLevel.None)
End Function