Где на самом деле хранится конфигурация при использовании файла Settings.settings в .NET?

100

Где на самом деле хранится конфигурация при использовании файла Settings.settings в .NET? Я хочу удалить сохраненные настройки, чтобы вернуться к состоянию по умолчанию, но не могу найти, где они хранятся ... есть идеи?

Адам Хейл
источник

Ответы:

100

Это зависит от того, находится ли выбранный вами параметр в области «Пользователь» или «Приложение».

Область пользователя

Настройки области пользователя хранятся в

C: \ Documents and Settings \ имя пользователя \ Local Settings \ Application Data \ ApplicationName

Вы можете читать / записывать их во время выполнения.

Для Vista и Windows 7 папка

C: \ Users \ имя пользователя \ AppData \ Local \ ApplicationName

или

C: \ Users \ имя пользователя \ AppData \ Roaming \ ApplicationName

Область применения

Параметры области приложения сохраняются в, AppName.exe.configи они доступны только для чтения во время выполнения.

Решение Йоги
источник
20
Папка для настроек области пользователя в Vista и Win7 - это C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Version или C: \ Users \ username \ AppData \ Roaming \ ApplicationName \ Publisher \ ApplicationName \ Version в зависимости от значение свойства Roaming на панели настроек.
jakdep
4
если это не надстройка, и в этом случае это будет AppName.dll.config
Anonymous Type
4
Мой локальный файл user.config в Windows 7 находится в C: \ Users \ <username> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Version
The Lonely Coder
53

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

public static string GetDefaultExeConfigPath(ConfigurationUserLevel userLevel)
{
  try
  {
    var UserConfig = ConfigurationManager.OpenExeConfiguration(userLevel);
    return UserConfig.FilePath;
  }
  catch (ConfigurationException e)
  {
    return e.Filename;
  }
}

ApplicationSettings (то есть settings.settings) по умолчанию использует PerUserRoamingAndLocal для пользовательских настроек (как я помнил).

Обновление: странно, но здесь слишком много неправильных ответов. Если вы ищете файл настроек с пользовательской областью действия (user.config), он будет расположен в следующей папке (для Windows XP):

C: \ Documents and Settings \ (имя пользователя) \ Local Settings \ Application Data \ (имя-компании, если существует) \ (имя-приложения) .exe_ (URL-адрес | StrongName) _ (хеш) \ (версия-приложения) \

Url или StrongName зависит от того, есть ли у вас строгое имя сборки приложения.

арбитр
источник
Есть идеи, что способствует хешированию на этом пути? Каждый последующий выпуск моего приложения получает другое значение хеш-функции, что делает бесполезным вызов ApplicationSettingsBase.Upgrade (). : /
Мэл Росс
2
Хеш - это хэш SHA1 StrongName, когда приложение подписано, или путь, когда приложение не подписано. Подробнее здесь msdn.microsoft.com/en-us/library/ms379611(v=vs.80).aspx
арбитр
20

Предполагая, что вы говорите о настольных компьютерах, а не о веб-приложениях:

Когда вы добавляете настройки в проект, VS создает файл с именем app.configв каталоге вашего проекта и сохраняет настройки в этом файле. Он также создает Settings.csфайл, который предоставляет статические средства доступа к отдельным параметрам.

Во время компиляции VS будет (по умолчанию; вы можете изменить это) скопирует app.configфайл в каталог сборки, изменив его имя, чтобы оно соответствовало исполняемому файлу (например, если ваш исполняемый файл назван foo.exe, файл будет назван foo.exe.config), которое является именем. Диспетчер конфигурации .NET ищет, когда он получает параметры во время выполнения.

Если вы измените настройку через редактор настроек VS, он обновит app.configи Settings.cs. (Если вы посмотрите на аксессоры свойств в сгенерированном коде в Settings.cs, вы увидите, что они отмечены атрибутом, содержащим значение по умолчанию для параметра, находящегося в вашем app.configфайле.) Если вы измените параметр, отредактировав app.configфайл напрямую, Settings.csне будет обновляться, но новое значение будет по-прежнему использоваться вашей программой при ее запуске, поскольку оно app.configкопируется foo.exe.configво время компиляции. Если вы отключите это (установив свойства файла), вы можете изменить настройку, напрямую отредактировав foo.exe.configфайл в каталоге сборки.

Затем есть пользовательские настройки.

Параметры области приложения доступны только для чтения. Ваша программа может изменять и сохранять настройки области действия пользователя, тем самым позволяя каждому пользователю иметь свои собственные настройки. Эти настройки не хранятся в foo.exe.configфайле (так как, по крайней мере, в Vista программы не могут писать ни в какой подкаталог Program Filesбез повышения прав ); они хранятся в файле конфигурации в каталоге данных приложения пользователя.

Путь к этому файлу %appdata%\%publisher_name%\%program_name%\%version%\user.config, например C:\Users\My Name\AppData\Local\My_Company\My_Program.exe\1.0.0\user.config. Обратите внимание: если вы дали своей программе строгое имя, строгое имя будет добавлено к имени программы в этом пути.

Роберт Россни
источник
1
Похоже, что компонент My_Company пути по умолчанию будет принадлежать Microsoft. Я еще не нашел способ изменить это, который действительно работает, если кто-то знает, что было бы хорошо добавить.
1
user565869, вы пробовали в Visual Studio, откройте вкладку приложения свойств проекта, нажмите кнопку информации о сборке, и тогда вы сможете изменить компанию? повторите это для каждого проекта в своем решении
gg89 01
15

Просматривая, чтобы узнать о хэше в имени папки, я наткнулся (через этот ответ ):

http://blogs.msdn.com/b/rprabhu/archive/2005/06/29/433979.aspx

(отредактируйте: ссылка на Wayback Machine: https://web.archive.org/web/20160307233557/http://blogs.msdn.com:80/b/rprabhu/archive/2005/06/29/433979.aspx )

Точный путь к user.configфайлам выглядит примерно так:

<Profile Directory>\<Company Name>\<App Name>_<Evidence Type>_<Evidence Hash>\<Version>\user.config

где

<Profile Directory>- это либо каталог перемещаемого профиля, либо локальный. По умолчанию настройки хранятся в локальном user.configфайле. Чтобы сохранить настройку в перемещаемом user.configфайле, вам необходимо пометить настройку SettingsManageabilityAttributeс SettingsManageabilityустановленным на Roaming.

<Company Name>- обычно является строкой, указанной в AssemblyCompanyAttribute(с оговоркой, что строка экранируется и усекается по мере необходимости, и если она не указана в сборке, у нас есть резервная процедура).

<App Name>- обычно строка, указанная в AssemblyProductAttribute(те же предостережения, что и для названия компании).

<Evidence Type>и <Evidence Hash>- информация, полученная из свидетельства домена приложения, чтобы обеспечить надлежащую изоляцию домена приложения и сборки.

<Version>- обычно версия, указанная в AssemblyVersionAttribute. Это необходимо для изоляции разных версий приложения, развернутых параллельно.

Имя файла всегда просто user.config".

ищущий
источник
К сожалению, ссылка на блог не работает. Я уверен, это было бы интересно.
UweBaemayr
3

Он находится в папке с именем вашего приложения в папке Application Data в домашней папке пользователя (C: \ documents and settings \ user на xp и c: \ users \ user в Windows Vista).

Существует некоторая информация здесь также.

PS: - попробуйте получить к нему доступ через% appdata% в окне запуска!

TheVillageIdiot
источник
2

Эмм, а нельзя ли просто использовать Settings.Default.Reset () для восстановления настроек по умолчанию?

Kildareflare
источник
1

Все ваши настройки хранятся в соответствующем файле .config.

Файл .settings просто предоставляет строго типизированный класс для набора параметров, которые принадлежат друг другу, но фактические параметры хранятся в app.config или файле .config вашего приложения.

Если вы добавите файл .settings, app.config будет автоматически добавлен для хранения настроек, если у вас его еще нет.

Правин Ангян
источник
1

Если ваш файл настроек находится в веб-приложении, они будут в файле web.config (прямо под вашим проектом. Если они находятся в любом другом типе проекта, они будут в файле app.config (также под вашим проектом). .

редактировать

Как указано в комментариях: настройки вашего приложения времени разработки находятся в файле app.config для приложений, отличных от веб-приложений. При сборке файл app.config копируется в выходной каталог и получает имя yourexename .exe.config. Во время выполнения будет прочитан только файл с именем yourexename.exe.config.

JMarsch
источник
1
Не верно. В запущенном приложении нет файла настроек app.config, потому что app.config будет переименован в [appname] .exe.config. И в любом случае этот файл будет содержать только настройки ApplicationScoped из settings.settins.
арбитр
@arbiter: Возможно, я неправильно понял вопрос, но Адам, похоже, спрашивал о значениях по умолчанию во время разработки. Они хранятся в app.config. Во время сборки файл app.config копируется в каталог сборки и переименовывается в (theapp.exe.config). Однако, если вы редактируете этот файл напрямую (и работаете в Visual Studio), вы рискуете перезаписать его содержимое при следующей сборке. Итог: для развернутого приложения (или если вы работаете вне среды IDE) измените файл name.exe.config). Если вы работаете в VS, измените либо значение по умолчанию в настройках, либо app.config
JMarsch
0

Два файла: 1) файл app.config или web.config. Параметры ее можно изменить после сборки с помощью текстового редактора. 2) Файл settings.designer.cs. В этом файле есть автоматически сгенерированный код для загрузки параметра из файла конфигурации, но также присутствует значение по умолчанию, если в файле конфигурации нет конкретной настройки.

Франк Швитерман
источник
0

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

jrsconfitto
источник