È necessario chiamare il metodo ConfigurationManager.RefreshSection per leggere gli ultimi valori direttamente dal disco. Ecco un modo semplice per testare e fornire risposta alla vostra domanda:
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);
}
}
mio app.config contenente:
<?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>
Dopo aver avviato l'applicazione, aprire l'app.config all'interno della cartella di compilazione, e cambia il valore dell'appSetting "myKey". Vedrai il nuovo valore stampato sulla console.
Per rispondere alla domanda, sì, vengono memorizzati nella cache la prima volta che vengono letti, penso, e per forzare la lettura direttamente dal disco, è necessario aggiornare la sezione.
E se ottengo impostazioni come questa: Properties.Settings.Default.MyValue? – 26071986
utilizzando Properties.Settings.Default.Reload(); – mservidio
@ 26071986 - Ho aggiornato la mia risposta per riflettere il codice relativo all'utilizzo della classe Impostazioni. – mservidio