понедельник, 5 сентября 2016 г.

app.config - как в него писать и читать из него при дебагинге и релизной сборке

Давно не писал, действительно интересно получилось.
Имеет WebForms приложение (да, их до сих пор приходится писать иногда).

Как дебажим приложение в Visual Studio, то она, как известно, создает специальную сборку в каталоге Debug. Обычно там что-то вроде такого, если не подключаем дополнительные библиотеки:
.exe - название экзешника
.pdb - информация для дебагинга
.exe.config - конфигурационный файл
.vshost.exe - запущенная VS копия .exe
.vshost.exe.сonfig - конфиг от .vshost.exe
.vshost.exe.manifest - ???

Прикол в том, что при работе с файлом конфигурации через ConfigurationManager, читать-то он читает, но просто так не пишет. Плюс к этому, если вносить изменения в конфиг по имени сборки, то изменения идут в .vshost.exe.сonfig.
Такое поведение приводит к тому, что после пересборки, снова встает копия файла .exe.config и, соответсвенно, настройки не применяются.

Выход: работать только с .exe.config

private static string GetSetting(string key)
        {
            Configuration cfg = ConfigurationManager.
OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
            AppSettingsSection appSettings = 
(AppSettingsSection)cfg.GetSection("appSettings");
            return appSettings.Settings[key].Value;
        }

private static void SetSetting(string key, string value)
        {
            Configuration configuration = ConfigurationManager.
OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
            configuration.AppSettings.Settings[key].Value = value;
            configuration.Save();

            ConfigurationManager.RefreshSection("appSettings");
        }

Первый метод читает, второй пишет :)

Комментариев нет:

Отправить комментарий