appSettings не читаются из 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.


person Chris Doggett    schedule 03.08.2009    source источник


Ответы (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 в соответствующий файл конфигурации решило проблему.

person Chris Doggett    schedule 03.08.2009