ConfigurationProperty недоступен из-за уровня защиты - PullRequest
9 голосов
/ 21 декабря 2011

Я хочу чтение / запись (и сохранение) файл конфигурации приложения в программе

Файл app.config выглядит так:

<configuration>
  <configSections>
    <section name="AdWordsApi" type="System.Configuration.DictionarySectionHandler" requirePermission="false"/>
  </configSections>
  <AdWordsApi>
    <add key="LogPath" value=".\Logs\"/>
    ...
  </AdWordsApi>
</configuration>

Когда я использую ConfigurationManager.GetSection для чтения app.config, он работает:

var adwords_section = (System.Collections.Hashtable) System.Configuration.ConfigurationManager.GetSection("AdWordsApi");
Console.WriteLine((string)adwords_section["LogPath"]);

Но когда я использую ConfigurationManager.OpenExeConfiguration :

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
ConfigurationSection section = config.GetSection("AdWordsApi");
Console.WriteLine(section["LogPath"]);

Я всегда получаю эту ошибку:

'System.Configuration.ConfigurationElement.this [System.Configuration.ConfigurationProperty]' недоступен из-за уровня защиты

Но так как язнаете, GetSection не может сохранить конфигурацию во время выполнения программы, как я уже говорил в начале: я хочу сохранить конфигурацию во время выполнения программы, поэтому я должен использовать OpenExeConfiguration .

Iдавно гуглил, я обнаружил, что я должен использовать AppSettings, но я использую пользовательский раздел.

Кто-нибудь может объяснить, почему произошла ошибка «Недостаток ConfigurationProperty»?Спасибо

Редактировать:

Я установил Копировать локальный из Система и System.Configuration до true

Ответы [ 3 ]

15 голосов
/ 03 апреля 2015
string key_value = refconfig.AppSettings.Settings["key_name"].Value;
12 голосов
/ 21 декабря 2011

Вы можете использовать эту статью .

Edit:

вы можете использовать конфигурацию:

  <configSections>
    <section name="AdWordsApi.appSettings" type="System.Configuration.AppSettingsSection" />
  </configSections>
  <AdWordsApi.appSettings>
    <add key="LogPath" value=".\Logs\"/>
  </AdWordsApi.appSettings>

этот код:

    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
    var settings = config.GetSection("AdWordsApi.appSettings") as AppSettingsSection;
    if (settings != null) Console.Write(settings.Settings["LogPath"].Value);
    Console.ReadLine();

Также Вы можете использовать эту статью .

1 голос
/ 21 декабря 2011

Я не уверен, сработает ли это для того, что вы пытаетесь сделать, но вы пытались использовать ConfigurationUserLevel.None вместо этого?

...