Странный случай настроек в файле app.config и базовом классе - PullRequest
0 голосов
/ 28 октября 2019

это очень странно.

Я создал файл app.config с некоторыми настройками.

Visual Studio создает класс для управления настройками "легко", но по какой-то причине, когда я звоню

Properties.Settings.Default.UrlImportacion

Получается настройка по умолчанию (та, которая была установлена ​​во время разработки). Когда я изменяю значение в файле app.config, получается только значение по умолчанию.

Я попытался добавить настройки в группу applicationSettings и в группу userSettings. Независимо от того, что я делаю, система всегда получает настройку по умолчанию.

Есть ли объяснение этому?

Спасибо, Хайме

1 Ответ

1 голос
/ 28 октября 2019

Настройки области приложения доступны только для чтения и могут быть изменены во время разработки или путем изменения файла .config между сеансами приложения.

Настройки пользовательской области могут быть записаны во время выполнения, но если вы измените / удалите/ добавить параметр, который вам нужен для вызова метода Properties.Settings.Default.Save();, чтобы сохранить изменения настроек между сеансами приложения;В противном случае настройки могут быть очищены при каждом обнаружении изменения.

Чтобы проверить, сохраняются ли ваши изменения, вы можете найти пользовательские настройки, хранящиеся здесь %userprofile%\appdata\local или %userprofile%\Local Settings\Application Data.

Обновление

Если я вас хорошо понимаю, это решение будет работать для вас.

Я попытался смоделировать вашу ситуацию, скопировав содержимое папки bin в новый проект и изменив ProjectName.exe.config и App.config файл вручную, значение по умолчанию (в старом проекте) для Color было Green, но мое ожидаемое значение было Purple.

Этот раздел - то, что ядобавлено к файлам ProjectName.exe.config и App.config :

<userSettings>
    <Namespace.Properties.Settings>
      <setting name="Color" serializeAs="String">
        <value>Purple</value>
      </setting>
    </Namespace.Properties.Settings>
</userSettings>

После выполнения вышеприведенного вывода Properties.Settings.Default.Color было Green.

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

Очевидно, что проблема имеет решение. Вы можете решить эту проблему, просто вызвав метод Reload, прежде чем пытаться прочитать значение:

Properties.Settings.Default.Reload();
var color = Properties.Settings.Default.Color;

Как описано в документации :

ПерезагрузкаМетод очищает текущие кэшированные значения свойств, вызывая перезагрузку этих значений из постоянного хранилища при последующем доступе к ним. Этот метод выполняет следующие действия:

  • Он очищает текущие кэшированные свойства путем очистки коллекции, представленной свойством PropertyValues.

  • Он вызываетСобытие PropertyChanged для каждого члена коллекции Properties.

Обновить контрастирует с Сброс в том, что первый загрузит последний набор сохраненных значений параметров приложения, тогда как последнийзагрузит сохраненные значения по умолчанию.

...