Де зберігаються Properties.Settings.Default?


145

Я думав, що це знаю, але сьогодні я знову підтверджуюсь неправильно.

Запуск VS2008, .NET 3.5 та C #. Я додав Налаштування користувача на вкладку Налаштування властивостей із значеннями за замовчуванням, а потім прочитав їх за допомогою цього коду:

myTextBox.Text = Properties.Settings.Default.MyStringProperty;

Потім, коли користувач редагує значення у діалоговому вікні параметрів, я зберігаю його так:

Properties.Settings.Default.MyStringProperty = myTextBox.Text;
Properties.Settings.Default.Save();

Моє запитання: де збережено це нове значення? файл MyApp.exe.config у виконавчому каталозі не оновлюється, він все ще містить значення за замовчуванням. Крім того, наскільки я можу сказати, жоден з інших файлів у цьому каталозі також не оновлюється! Однак, коли програма знову читає значення, воно отримує змінене значення, тому я знаю, що воно десь збережено ...

Це не просто академічно, мені потрібно було вручну відредагувати значення сьогодні вранці, і я затуманився, коли не зміг знайти нічого, що змінюється.


2
Важливо зауважити, що місце зберігання може змінюватися між різними версіями фреймворку або ОС. Не жорстко кодуйте програмне забезпечення для місця зберігання.
Грег Д

Якщо ви знаходитесь у візуальній студії, розробляєте новий додаток, то перевірте в AppData \ Local \ Microsoft \ ВАШЕ ІМЯ ЗАЯВКИ Ім'я файлу є user.config. Я в Windows 7
JenonD

або під AppData \ Local one
KansaiRobot

Щось із чим я боровся, що спричинило мене до цього питання та інших: user.config не створюється до applicationSettings.Save (); це називається. (де визначено applicationSettings ApplicationSettings applicationSettings = новий ApplicationSettings (це);).
об'єднати

Відповіді:


142

Для того, щоб працювати з новішими версіями політики Windows щодо дозволу лише читати доступ за замовчуванням до папки Program Files (якщо ви не вимагаєте підняття за допомогою UAC, але це інша тема ...), у вашому додатку буде папка налаштувань під %userprofile%\appdata\localабо %userprofile%\Local Settings\Application Dataзалежно від того, яку версію Windows ви працюєте, для налаштувань, які відповідають користувачеві. Якщо ви зберігаєте налаштування для всіх користувачів, вони знаходяться у відповідній папці під C:\usersабо C:\Documents and Settingsдля всіх профілів користувачів (наприклад:) C:\users\public\appdata\local.


3
Крім того, .config, сформований у Visual Studio, який потрапляє у папку виконуваного файлу, я вважаю, він використовується лише для налагодження. Під час упаковки остаточної програми ви не включаєте цю .config, оскільки вона створюється вперше, коли користувач запускає програму.
Буде Еддінс

11
Новіші версії? Так відбувається з Windows 2000. Ви просто пішли з цього, тому що працювали в якості адміністратора.
Joel Coehoorn

1
@Joel Coehoorn: Правда, однак зараз в обліковому записі адміністратора в Windows Vista і далі ви не можете отримати доступ до запису до програмних файлів без запиту про підняття UAC за замовчуванням. Це політика, яка змінилася. :)
jasonh

2
Слід також зазначити, що папка змінюється з кожним оновленням версії - тому користувач втрачає свої переваги щоразу, коли ви оновлюєте програмне забезпечення.
Ян Бойд

17
Насправді ні, вони цього не роблять. Вам потрібно створити налаштування, назвіть його на кшталт "UpgradeNeeded" та встановіть його за значенням true. Потім, коли ваш додаток запуститься, перевірте це. Якщо це правда, зателефонуйте Properties.Settings.Default.Upgrade (), .Save () та .Reload (). Потім скиньте UpgradeNeeded на значення false та збережіть.
Jasonh

86

Ви можете отримати шлях програмно:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;

1
Гм, я бачу ситуації, коли шлях, повернутий цим, НЕ шлях, який використовується Налаштуваннями. Будь-яке розуміння?
Джордж Мауер

1
@GeorgeMauer Ви маєте на увазі Roamingчи, можливо, LocalLowзамість цього Local? ConfigurationUserLevelзалежить від профілю користувача в роумінгу чи локального доступу. У компаніях часто роумінгу.
Кей Зед

Посилання на цю відповідь та мої коментарі під нею показують, як виглядає шлях.
Кей Зед

Я знаходжу цю саму відповідь всюди, використовую ConfigurationManager.OpenExeConfiguration () - але це дає три варіанти залежно від того, яке значення ConfigurationUserLevel ви передаєте, які дають три різні результати - що це ?. Як ви дізнаєтесь у програмі, в коді під час виконання, саме з якого файлу програма отримує свої налаштування?
Дейв

None: Отримує конфігурацію, що стосується всіх користувачів, PerUserRoaming: отримує конфігурацію роумінгу, яка застосовується до поточного користувача, PerUserRoamingAndLocal: отримує локальну конфігурацію, що застосовується до поточного користувача.
Акбарітабар

8

дякую, що вказали на мене в правильному напрямку. Я знайшов user.config, розташований у цій жахливості: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

Мені довелося скасувати версію в моїй програмі, і всі налаштування, здавалося, зникли. додаток створив нову папку з новою версією та використав налаштування за замовчуванням. Вічно знайшлося, де файл зберігався, але тоді це була проста копія та вставка, щоб отримати налаштування до нової версії.


Як знати LOOKSLIKESOMEKINDOFHASH?
NeoSvet

1
Виклик Properties.Settings.Default.Upgrade () зробить те саме автоматично. Він відновлює конфігурацію з попередньої версії, як @jasonh сказав у іншій відповіді вище.
Алекс

5

він зберігається в ваших документах і Settings \% користувача% \ Local Data Settings \ Application ...... і т.д. пошук файлів називається User.config там

однак місце розташування може змінитися.


5
Насправді, правильна змінна середовище для специфічних для користувача властивостей -% userprofile%. Визначення Документів та Налаштувань під Vista або 7 призведе до відсутності папки або відсутніх дозволів до папки, яку вона знайде.
Jasonh

1

Один з моїх служб Windows увійшов як локальна система на Windows Server 2016, і я можу знайти user.config під C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ {ваше ім'я програми}.

Я думаю, що найпростіший спосіб - це пошук вашої програми на диску C, а потім перевірити, де знаходиться user.config


0

Налаштування, орієнтовані на користувача, зберігаються у папці Дані програми для цього додатка. Шукайтеuser.config файл.

Я не знаю, чого ви очікували, оскільки користувачі часто навіть не мають доступу до запису до виконавчого каталогу.


0

Вони зберігаються в YOUR_APP.exe.config, файл зберігається в одній папці з YOUR_APP.exeфайлом, <userSettings>розділ:

   <userSettings>
      <ShowGitlabIssues.Properties.Settings>
         <setting name="SavedUserName" serializeAs="String">
            <value />
         </setting>
         <setting name="SavedPassword" serializeAs="String">
            <value />
         </setting>
         <setting name="CheckSave" serializeAs="String">
            <value>False</value>
         </setting>
      </ShowGitlabIssues.Properties.Settings>
   </userSettings>

ось код CS:

public void LoadInfoLogin()
{
    if (Properties.Settings.Default.CheckSave)// chkRemember.Checked)
    {
        txtUsername.Text = Properties.Settings.Default.SaveUserName;
        txtPassword.Text = Properties.Settings.Default.SavePassword;
        chkRemember.Checked = true;
    }
...

-1

Для всіх, хто цікавиться, де налаштовані додатки з магазину Microsoft, вони є або в WindowsApps, який дуже заблокований, але ви можете потрапити туди, відкривши додаток і відкривши шлях до файлу за допомогою диспетчера завдань.

Але ймовірніше, що вони врятуються C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.


-17

У кореневій папці вашого проекту є папка під назвою "Властивості", а в цій папці є файл * .settings. Ось де воно зберігається.


1
це правильно під час розробки . Після розгортання вони йдуть в інше місце.
Joel Coehoorn

2
У мене це було запущено в середовищі розробки, і файл залишився незмінним. там зберігається лише значення за замовчуванням, а не оновлене.
Стен Р.

4
Stan R правильний, він зберігає лише значення за замовчуванням. Не значення, які ви можете змінити під час налагодження.
Анонімний тип
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.