Pregunta

Recientemente me mudé a Vista x64 y, de repente, mi bloque machine.config appSettings no está siendo leído por ningún ensamblado .NET.

Justo después de configSections, y antes de configProtectedData en C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config, tengo:

<appSettings>
    <add key="foo" value="blah"/>
</appSettings>
<system.runtime.remoting>
    <customErrors mode="Off"/>
</system.runtime.remoting>

Tuve que guardarlo ejecutando Notepad ++ como administrador, porque de lo contrario está bloqueado, probablemente por buenas razones. Ejecutando el siguiente código en SnippetCompiler o VS .NET 2008:

    foreach(var s in ConfigurationManager.AppSettings.AllKeys)
    {
        Console.WriteLine(s);   
    }

    AppSettingsReader asr = new AppSettingsReader();

    Console.WriteLine(asr.GetValue("foo", typeof(string)));

no escribe claves y falla con la siguiente excepción:

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

La aplicación que escribo usa machine.config como alternativa para averiguar en qué entorno debe estar ejecutando un usuario si no se puede encontrar en app.config, por lo que me gustaría evitar tener que volver a escribir mi aplicación para descubrir algo que debería funcionar igual que en 2000 y XP.

¿Fue útil?

Solución

Lo resolvió con la siguiente línea de código:

ConfigurationManager.OpenMachineConfiguration().FilePath

que devolvió:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config

en lugar de:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

Olvidé que estoy usando 64 bits ahora. Agregar la sección appSettings en el archivo de configuración adecuado resolvió el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top