由于其保护级别,ConfigurationProperty无法访问

时间:2011-12-21 09:30:30

标签: c# .net app-config configurationmanager configurationsection

我想在程序中读/写(并保存)应用程序的配置文件

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

我已经google了很长时间,我发现使用AppSettings,但我使用的是自定义部分..

任何人都可以解释为什么会出现“ConfigurationProperty无法访问”的错误?感谢

修改

我已将系统 System.Configuration 复制本地设置为 true

3 个答案:

答案 0 :(得分:15)

string key_value = refconfig.AppSettings.Settings["key_name"].Value;

答案 1 :(得分:12)

您可以使用this article

编辑:

你可以使用config:

  <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();

您也可以使用this article

答案 2 :(得分:1)

我不确定它是否适用于您尝试执行的操作,但您是否尝试过使用ConfigurationUserLevel.None?