Настройки app не читаются из machine.config в Vista
Недавно я перешел на Vista x64, и внезапно мой блок appSettings machine.config не читается никакими сборками.NET.
Сразу после configSections и перед configProtectedData в C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config у меня есть:
<appSettings>
<add key="foo" value="blah"/>
</appSettings>
<system.runtime.remoting>
<customErrors mode="Off"/>
</system.runtime.remoting>
Пришлось сохранить его, запустив Notepad++ от имени администратора, потому что в противном случае он заблокирован, вероятно, по уважительным причинам. Выполнение следующего кода в SnippetCompiler или VS .NET 2008:
foreach(var s in ConfigurationManager.AppSettings.AllKeys)
{
Console.WriteLine(s);
}
AppSettingsReader asr = new AppSettingsReader();
Console.WriteLine(asr.GetValue("foo", typeof(string)));
не записывает ключей и завершается с ошибкой со следующим исключением
---
The following error occurred while executing the snippet:
System.InvalidOperationException: The key 'foo' does not exist in the appSettings configuration section.
at System.Configuration.AppSettingsReader.GetValue(String key, Type type)
at MyClass.RunSnippet()
at MyClass.Main()
---
Приложение, которое я пишу, использует machine.config в качестве запасного варианта для определения среды, в которой должен работать пользователь, если его невозможно найти в app.config, поэтому я хотел бы избежать необходимости переписывать мое приложение, чтобы выяснить, что-то, что должно работать так же, как в 2000 и XP.
1 ответ
Решил это с помощью следующей строки кода:
ConfigurationManager.OpenMachineConfiguration().FilePath
который вернулся:
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config
вместо:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
Забыл, что я сейчас использую 64 бита. Добавление раздела appSettings в соответствующий файл конфигурации решило проблему.