2013-08-13 3 views
4

Есть ли способ получить configSource из кода? Я основал How to programmatically retrieve the configSource Location from config file, но все ответы неверны.Получить configSource appSettings из кода

У меня есть следующий конфиг:

<configuration> 
    <appSettings configSource="appsettings.config"/> 
</configuration> 

Когда я попытался вызвать следующий код:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var file = config.AppSettings.File; 

file всегда пусто. То же самое для ConfigurationManager.AppSettings["configSource"]. Я думаю, что что-то изменилось в .NET 4, потому что ответы старые. Я также попробовал config.AppSettings.SectionInformation.ConfigSource, но он также пуст.

Мне нужен этот путь, чтобы можно было контролировать appSettings. Вы можете прочитать больше: How to discover that appsettings changed in C#?

+0

Вы можете попробовать использовать это и посмотреть, вернет ли он правильный конфигурационный файл обратно ConfigurationManager.OpenMappedExeConfiguration (новый ExeConfigurationFileMap {ExeConfigFilename = configurationFilePath}, ConfigurationUserLevel.None); – TYY

+0

@TYY да это. –

+0

Свойство 'ConfigSource' не работает? http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx –

ответ

3

У меня есть некоторые проблемы с этим, но я наконец нашел ответ.

Когда конфигурационный файл выглядит следующим образом:

<configuration> 
    <appSettings file="appsettings.config"/> 
</configuration> 

Код выше работает правильно:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var file = config.AppSettings.File; 

Но когда конфиг файл (он работает так же, как и выше, но синтаксис отличается):

<configuration> 
    <appSettings configSource="appsettings.config"/> <!-- configSource instead of file --> 
</configuration> 

я должен использовать следующее:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
var file = config.AppSettings.SectionInformation.ConfigSource; 

Поэтому я должен проверить, не является ли config.AppSettings.SectionInformation.ConfigSource, а config.AppSettings.File - не пустая строка, а монитор правильный.

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