Где хранятся Properties.Settings.Default?

Я думал, что знаю это, но сегодня я снова ошибаюсь.

Запуск VS2008, .NET 3.5 и C #. Я добавил пользовательские настройки на вкладку Properties Settings со значениями по умолчанию, а затем прочитал их, используя этот код:

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

Затем, после того, как пользователь редактирует значение в диалоговом окне параметров, я сохраняю его следующим образом:

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

У меня вопрос, где сохранено это новое значение? файл MyApp.exe.config в исполняемом каталоге не обновляется, он по-прежнему содержит значения по умолчанию. К тому же, насколько я могу судить, ни один из других файлов в этом каталоге также не обновляется! Однако, когда программа считывает значение обратно, она получает измененное значение, поэтому я знаю, что оно где-то сохранено ...

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


person DaveN59    schedule 11.06.2009    source источник
comment
Важно отметить, что место хранения может меняться в зависимости от версии платформы или ОС. Не выполняйте жесткое программирование в месте хранения.   -  person Greg D    schedule 11.06.2009
comment
Если вы работаете в Visual Studio и разрабатываете новое приложение, проверьте в AppData \ Local \ Microsoft \ ВАШЕ ИМЯ ПРИЛОЖЕНИЯ Имя файла - user.config. Я в Windows 7   -  person JenonD    schedule 18.03.2015
comment
или под AppData \ Local   -  person KansaiRobot    schedule 13.12.2018
comment
Что-то, с чем я боролся, привело меня к этому и другим вопросам: user.config не создается до applicationsSettings.Save (); называется. (где applicationSettings определен ApplicationSettings applicationSettings = new ApplicationSettings (this);).   -  person amalgamate    schedule 29.08.2019


Ответы (10)


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

person jasonh    schedule 11.06.2009
comment
Кроме того, .config, созданный в Visual Studio, который попадает в папку исполняемого файла, я считаю, используется только для отладки. При упаковке окончательного приложения вы не включаете этот файл .config, поскольку он создается при первом запуске приложения пользователем. - person Will Eddins; 11.06.2009
comment
Более новые версии? Так было с Windows 2000. Вам это просто сошло с рук, потому что вы работали как администратор. - person Joel Coehoorn; 11.06.2009
comment
Вот и все. Теперь, когда мне все объяснили, это имеет смысл - не знаю, почему я не понял этого раньше, но ... В любом случае, ваше объяснение было первым, наиболее полным, так что вы поняли. - person DaveN59; 11.06.2009
comment
@Joel Coehoorn: Верно, однако теперь в учетной записи администратора в Windows Vista и в более поздних версиях вы не можете получить доступ на запись к программным файлам без запроса на повышение прав UAC по умолчанию. Это изменилась политика. :) - person jasonh; 11.06.2009
comment
Следует также отметить, что папка изменяется при каждом обновлении версии, поэтому пользователь теряет свои предпочтения каждый раз, когда вы обновляете программное обеспечение. - person Ian Boyd; 09.11.2011
comment
На самом деле нет, они этого не делают. Вам нужно создать параметр, назовите его как-то вроде UpgradeNeeded и по умолчанию установите значение true. Затем, когда ваше приложение запустится, проверьте это. Если это правда, вызовите Properties.Settings.Default.Upgrade (), .Save () и .Reload (). Затем сбросьте UpgradeNeeded на false и сохраните. - person jasonh; 21.11.2011
comment
Джейсон, мне жаль, что я не выучил это за 3 года до этого. Надоело делать скриншоты настроек приложения перед обновлением любой версии :) - person tequilacat; 01.05.2018
comment
@WillEddins Что? Не могли бы вы подробнее рассказать об этом? - person KansaiRobot; 13.12.2018
comment
Как сохранить настройки для всех пользователей? - person InteXX; 27.07.2019
comment
почему я нахожу его в foobar.exe.config? Я использую vs2019 и .net 4.5. - person Lei Yang; 09.04.2020

Вы можете получить путь программно:

using System.Configuration;  // Add a reference to System.Configuration.dll
...
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath;
person Akbaritabar    schedule 15.08.2011
comment
Хм, я вижу ситуации, когда путь, возвращаемый this, НЕ является путем, используемым настройками. Любое понимание? - person George Mauer; 13.07.2016
comment
@GeorgeMauer Вы имеете в виду Roaming или, возможно, LocalLow вместо Local? ConfigurationUserLevel зависит от того, какой профиль пользователя является перемещаемым или локальным. В компаниях это часто роуминг. - person Kay Zed; 30.07.2016
comment
Ссылка на этот ответ и мои комментарии под ним, показывающие, как выглядит путь. - person Kay Zed; 30.07.2016
comment
Я нахожу этот же ответ везде, используйте ConfigurationManager.OpenExeConfiguration () - но это дает три варианта в зависимости от того, какое значение ConfigurationUserLevel вы передаете, что дает три разных результата - что это такое ?. Как узнать в программе, в коде, во время выполнения, из какого именно файла программа получает свои настройки? - person Dave; 09.05.2020
comment
Нет: получает конфигурацию, которая применяется ко всем пользователям, PerUserRoaming: получает конфигурацию роуминга, которая применяется к текущему пользователю, PerUserRoamingAndLocal: получает локальную конфигурацию, которая применяется к текущему пользователю. - person Akbaritabar; 10.05.2020

спасибо, что указали мне в правильном направлении. Я нашел файл user.config, расположенный в этом чудовище: c: \ users \ USER \ AppData \ Local \ COMPANY \ APPLICATION.exe_Url_LOOKSLIKESOMEKINDOFHASH \ VERSION \ user.config.

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

person Jeremy Ehret    schedule 19.06.2018
comment
Как узнать ВИДИТЕЛЬСТВО НЕКОТОРЫЕ? - person NeoSvet; 10.02.2019
comment
Вызов Properties.Settings.Default.Upgrade () сделает то же самое автоматически. Он восстанавливает конфигурацию из своей предыдущей версии, как @jasonh сказал в другом ответе выше. - person Alex; 15.03.2019
comment
@NeoSvet и другие, которые сталкиваются с этим, см. Этот вопрос SO, чтобы узнать, как сгенерировать хеш. - person Chris; 29.12.2020

он сохраняется в ваших документах и ​​настройках \% user% \ Local Settings \ Application Data ...... и т.д. найдите там файл с именем user.config

однако расположение может измениться.

person Stan R.    schedule 11.06.2009
comment
Фактически, правильная переменная среды для пользовательских свойств -% userprofile%. Указание документов и настроек в Vista или 7 приведет либо к отсутствию папки, либо к отсутствию прав доступа к найденной папке. - person jasonh; 11.06.2009
comment
Мне это очень помогло ... Спасибо, Стэн ???? - person ksrds; 09.11.2020

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

Я думаю, что самый простой способ - это поискать имя вашего приложения на диске C, а затем проверить, где находится user.config

person EvilDuck    schedule 22.07.2019

Они сохраняются в 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;
    }
...
person Luke    schedule 26.06.2020

Пользовательские настройки сохраняются в папке данных приложения пользователя для этого приложения. Найдите user.config файл.

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

person Joel Coehoorn    schedule 11.06.2009

если вы используете Windows 10, это каталог:

C: \ Users ‹UserName› \ AppData \ Local \

+

‹ProjectName.exe_Url_somedata› \ 1.0.0.0 ‹filename.config›

person Paolo Munaretto    schedule 17.11.2020

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

Но более вероятно, что они сохранены в C:\Users\[USERNAME]\AppData\Local\Packages\[NUMBERS][COMPANY].[APPLICATION]_[RANDOMDATA]\LocalCache\Local\[COMPANY]\[APPLICATION].exe_Url_[RANDOMDATA]\[VERSION]\user.config.

person Lukas    schedule 21.10.2019

В корневой папке вашего проекта есть папка «Свойства», а в этой папке есть файл * .settings. Вот где он хранится.

person J.W.    schedule 11.06.2009
comment
это правильно при разработке. После развертывания они уходят в другое место. - person Joel Coehoorn; 11.06.2009
comment
У меня это работало в среде разработки, и файл остался без изменений. он сохраняет там только значение по умолчанию, но не обновленное. - person Stan R.; 11.06.2009
comment
Stan R правильный, он сохраняет только значение по умолчанию. Не значения, которые вы можете изменить во время отладки. - person Anonymous Type; 26.08.2010