La configuración de la aplicación no se lee desde machine.config en Vista
-
10-07-2019 - |
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.
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.