Чтобы получить последние значения, прочитанные непосредственно с диска, необходимо вызвать метод ConfigurationManager.RefreshSection. Вот простой способ проверить и дать ответ на ваш вопрос:
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);
}
}
Мой app.config, содержащий:
<?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>
После запуска приложения, откройте app.config в папке сборки, и измените значение appSetting «myKey». Вы увидите новое значение, напечатанное на консоли.
Чтобы ответить на вопрос, да, они кэшируются в первый раз, когда они кажутся читаемыми, я думаю, и чтобы заставить читать прямо с диска, вам нужно обновить раздел.
И если я получаю настройку следующим образом: Properties.Settings.Default.MyValue? – 26071986
, используя Properties.Settings.Default.Reload(); – mservidio
@ 26071986 - Я обновил свой ответ, чтобы отобразить код для использования класса «Настройки». – mservidio