8

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

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"]); 

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

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

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

'System.Configuration.ConfigurationElement.this[System.Configuration.ConfigurationProperty]' is inaccessible due to its protection level

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

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

Любые может объяснить, почему это «ConfigurationProperty недоступен» произошла ошибка? Благодаря

Edit:

Я поставил копию локального из системы и System.Configuration к правда

ответ

12

Вы можете использовать this article.

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

Также Вы можете использовать this article.

+0

Я определил AdwordsSettings как подкласс ConfigurationSection, как вы сказали: http: //pastecode.com/jF, и программа останавливается здесь: string path = AdwordsSettings.Settings.LogPath с NullReferenceException (объект не установлен в экземпляр объекта) –

+0

И когда программа останавливается там, я обнаружил AdwordsSettings.Настройки ** null ** в отладчике –

+0

@gbstack, вы должны прочитать эту статью более подробно или просмотреть более похожие статьи, чтобы лучше понять конфигурационную систему, http://www.codeproject.com/KB/dotnet /mysteriesofconfiguration.aspx. Предполагается ваша первоначальная ошибка, так как вы неправильно понимаете, как читать раздел. –

1

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

+0

Спасибо, но после использования ConfigurationUserLevel.None и ConfigurationUserLevel.PerUserRoaming я все равно получаю ту же ошибку. –

10

string key_value = refconfig.AppSettings.Settings ["key_name"]. Значение;

+0

, это то, что фиксировал мой код в любом случае ... полученный из этого «Configuration.AppSettings возвращает объект AppSettingSections, AppSettingSections получен из ConfigurationSection, который получен из ConfigurationElement, который определяет этот оператор [] как« защищенный внутренний », что означает, что он« недоступен из-за его уровня защиты ». Возможно, вы захотите попробовать cs.AppSettings.Settings [" CompanyName "]);" – pcalkins

+0

nice - работал для меня и спас меня, чтобы реорганизовать мои настройки конфигурации. Благодарю. – soupy1976

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