2016-05-05 2 views
1

В:C# Открытие файла конфигурации из любого места

Using ConfigurationManager to load config from an arbitrary location Я нашел то, что кажется решением. Проект, над которым я работаю, использует местоположение файла appSettings.config в сети. НО, когда я попытался использовать ссылочный код:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap("Z:\Settings\appSettings.config"); //Path to your config file 

System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap); 

Пока все хорошо. Файл appSettings.config выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <appSettings> 
    <add key="Environment" value="Development" /> 
    </appSettings> 
</configuration> 

НО тогда я получаю эту следующую строку:

var settings = configuration.AppSettings.Settings; 

или что-нибудь, используя его, как Settings.Count, я получаю Invalid Cast исключение. В принципе, как мне получить значение для «Окружающей среды» от этого?

+0

'var environment = configuration.AppSettings [" Environment "]' – Brian

+0

Похоже, что тег 'appSettings' не сопоставляется с объектом' AppSettingsSection', а скорее 'DefaultSection'. Не знаю, почему, хотя я вернусь к вам, если приду к каким-либо выводам. – Grx70

ответ

3

Я нашел это работает:

System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 

fileMap.ExeConfigFilename = @"Z:\appSettings.config"; //Path to your config file 

System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); // OpenMappedMachineConfiguration(fileMap); 
return configuration.AppSettings.Settings["Environment"].Value; 

Это работает без ошибок.

+0

Спасибо :) Пробовал и терпел массу других решений. – Iain

Смежные вопросы