Изменение конфигурации приложения без перезапуска приложения

у меня есть следующая проблема: я ввожу новую функцию в приложение (Запуск от имени службы Windows), и я хотел бы, чтобы эта новая функция контролировалась (вкл / выкл) с помощью какой-то записи файла конфигурации (системы MyKey). Я могу сохранить запись конфигурации в приложении.config, но если я хочу изменить его с on - >off или иначе, потребуется перезапустить службу Windows, и я хочу избежать этого. Я хочу, чтобы мое приложение запускалось и принимало изменения в конфигурации.

вопрос: есть ли механизм сборки в .NET, который решает эту проблему ? Думаю, я мог бы создать свой собственный файл конфигурации, а затем использовать FileSystemWatcher etc... Но, возможно, .NET позволяет использовать внешние файлы конфигурации и перезагрузит значение ??

ConfigurationManager.AppSettings["myKey"]

Спасибо, Павел

EDIT 1: Спасибо за ответы. Однако я написал следующий фрагмент, и он не работает (я попытался создать appSettingSection в обоих местах: до и внутри петли):

static void Main(string[] args)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    // AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
    for (int i = 0; i < 10; i++)
    {
        ConfigurationManager.RefreshSection("appSettings");
        AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
        string myConfigData = appSettingSection.Settings["myConfigData"].Value; // still the same value, doesn't get updated
        Console.WriteLine();
        Console.WriteLine("Using GetSection(string).");
        Console.WriteLine("AppSettings section:");
        Console.WriteLine(
          appSettingSection.SectionInformation.GetRawXml()); // also XML is still the same
        Console.ReadLine();
    }
}

Я вручную редактировать конфиг файл, когда приложение останавливается на

2 ответов


один раз оригинальное приложение.файл конфигурации загружен, его значения кэшируются, так как вы знаете, вам придется перезапустить приложение. Способ обойти это-создать новый объект config и прочитать ключи вручную следующим образом:

var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
string myConfigData = appConfig.AppSettings.Settings["myConfigData"].Value;

Если вы обрабатываете конфигурацию вручную (возможно, даже не в приложении.config file), затем вы можете периодически проверять этот файл на наличие обновлений.

FileSystemWatcher есть... вероятно, излишне, и не гарантируется во всех сценариях. Лично я бы просто опрашивал файл каждые (скажем) 30 секунд.