14

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

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 is inaccessible”错误?谢谢

编辑:

我已将SystemSystem.Configurationcopy local设置为true

4

3 回答 3

21
string key_value = refconfig.AppSettings.Settings["key_name"].Value;
于 2015-04-03T00:05:18.603 回答
13

你可以使用这篇文章

编辑:

你可以使用配置:

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

你也可以使用这篇文章

于 2011-12-21T11:35:59.530 回答
1

我不确定它是否适用于您正在尝试做的事情,但是您是否尝试过使用 ConfigurationUserLevel.None 代替?

于 2011-12-21T10:06:25.427 回答