Следующий файл сопоставляется, а затем открывается как переменная System.Configuration:
string FilePath = System.Reflection.Assembly.GetAssembly(typeof(EncryptDecryptViewModel)).Location
FilePath += @".config";
var ConfigFileMap = new ExeConfigurationFileMap();
ConfigFileMap.ExeConfigFilename = FilePath;
Configuration LocalConfigurationManager = ConfigurationManager.OpenMappedExeConfiguration(ConfigFileMap, ConfigurationUserLevel.None);
Теперь вы можете извлекать значения из файла конфигурации сборок так же, как и через диспетчер конфигурации, однако вы должны быть немного более явными в своих запросах.
При использовании System.Configuration.ConfigurationManager следующее будет допустимым и вернет значение:
string s = System.Configuration.ConfigurationManager.AppSettings["SomeSetting"];
Однако при использовании переменной Configuration LocalConfigurationManager (из приведенного выше кода) вызов аналогичен обычному вызову ConfigurationManager, например:
string s = LocalConfigurationManager.AppSettings["ConfigurationSections"];
Вы получите следующую ошибку при попытке запустить код:
'System.Configuration.ConfigurationElement.this [System.Configuration.ConfigurationProperty]' является
недоступен из-за уровня защиты
Это потому, что в ConfigurationManager свойство AppSettings является NameValueCollection. В переменной Configuration AppSettings фактически является System.Configuration.AppSettingsSection, который содержит свойство с именем Settings, которое представляет собой KeyValueConfigurationCollection, поэтому для доступа к свойству вызов будет выглядеть следующим образом:
string s = LocalConfigurationManager.AppSettings.Settings["SomeSetting"].Value;
Для разделов строк соединения будет использоваться следующий синтаксис
string ConnectionString = LocalConfigurationManager.ConnectionStrings.ConnectionStrings["connectionStringName"].ConnectionString;