Debe llamar al método ConfigurationManager.RefreshSection para obtener los últimos valores leídos directamente del disco. Aquí está una manera simple de probar y dar respuesta a su pregunta:
static void Main(string[] args)
{
while (true)
{
// There is no need to restart you application to get latest values.
// Calling this method forces the reading of the setting directly from the config.
ConfigurationManager.RefreshSection("appSettings");
Console.WriteLine(ConfigurationManager.AppSettings["myKey"]);
// Or if you're using the Settings class.
Properties.Settings.Default.Reload();
Console.WriteLine(Properties.Settings.Default.MyTestSetting);
// Sleep to have time to change the setting and verify.
Thread.Sleep(10000);
}
}
Mi app.config que contiene:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ConsoleApplication2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings>
<add key="myKey" value="Original Value"/>
</appSettings>
<userSettings>
<ConsoleApplication2.Properties.Settings>
<setting name="MyTestSetting" serializeAs="String">
<value>Original Value</value>
</setting>
</ConsoleApplication2.Properties.Settings>
</userSettings>
</configuration>
Después de iniciar la aplicación, abra el app.config dentro de la carpeta de compilación, y cambie el valor de la aplicaciónConfigurando "myKey". Verá el nuevo valor impreso en la consola.
Para responder a la pregunta, sí, se almacenan en la memoria caché la primera vez que se leen, creo, y para forzar la lectura directamente desde el disco, debe actualizar la sección.
Y si obtengo una configuración como esta: Properties.Settings.Default.MyValue? – 26071986
usando Properties.Settings.Default.Reload(); – mservidio
@ 26071986 - He actualizado mi respuesta para reflejar el código cuando se usa la clase Configuración. – mservidio