Під час використання файла Settings.settings у .NET, де фактично зберігається конфігурація?


100

Під час використання файла Settings.settings у .NET, де фактично зберігається конфігурація? Я хочу видалити збережені налаштування, щоб повернутися до стану за замовчуванням, але не можу знайти, де він зберігається ... будь-які ідеї?

Відповіді:


100

Це залежить від того, чи вибрано вибране налаштування в межах "Користувач" або "Прикладне".

Область користувача

Налаштування обсягу користувача зберігаються в

C: \ Документи та параметри \ ім'я користувача \ Локальні налаштування \ Дані програми \ Ім'я програми

Ви можете їх читати / писати під час виконання.

Для Vista та Windows 7 папка є

C: \ Користувачі \ ім'я користувача \ AppData \ Local \ ApplicationName

або

C: \ Користувачі \ ім'я користувача \ AppData \ Роумінг \ ApplicationName

Область застосування

Налаштування обсягу програми зберігаються в програмі, AppName.exe.configі вони читаються лише під час виконання.


20
Папка для налаштувань обсягу користувача на Vista та Win7 - це C: \ Users \ username \ AppData \ Local \ ApplicationName \ Publisher \ ApplicationName \ Версія або C: \ Користувачі \ ім'я користувача \ AppData \ Роумінг \ ApplicationName \ Видавець \ ApplicationName \ Версія залежно від значення властивості роумінгу на панелі налаштувань.
jakdep

4
якщо його додаток не буде, в цьому випадку це буде AppName.dll.config
анонімний тип

4
Мій локальний user.config для Windows 7 знаходиться в C: \ Users \ <ім'я користувача> \ AppData \ Local \ Publisher \ ApplicationName_Eid_EvidenceHash \ Версія
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;
  }
}

Налаштування програми (тобто налаштування.настройки) використовують PerUserRoamingAndLocal для налаштувань користувача за замовчуванням (як я запам'ятав).

Оновлення: Дивно, але тут занадто багато неправильних відповідей. Якщо ви шукаєте для вас файл налаштувань масштабування користувача (user.config), він буде розташований у такій папці (для Windows XP):

C: \ Документи та налаштування \ (ім'я користувача) \ Локальні налаштування \ Дані програми \ (назва компанії (якщо така існує)) \ (назва програми) .exe_ (Url | StrongName) _ (хеш) \ (версія програми) \

Url або StrongName залежить від того, чи маєте ви чинне ім'я для складання програми.


Будь-яка ідея, що сприяє хешу на цьому шляху? Кожен наступний випуск мого додатка отримує інше хеш-значення, що робить виклик ApplicationSettingsBase.Upgrade () марним. : /
Мал Росс

2
Hash - це хеш 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, ви спробували у візуальній студії, відкрийте вкладку програми властивості проекту, натисніть кнопку інформації про збірку, і ви зможете змінити компанію? повторіть, що для кожного проекту у вашому рішенні
gg89

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

Він знаходиться у папці з назвою програми у папці Дані програми у домашній папці користувача (C: \ документи та налаштування \ користувач у xp та c: \ users \ користувач у Windows Vista).

Існує деяка інформація тут також.

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


2

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


1

Усі ваші налаштування зберігаються у відповідному файлі .config.

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

Якщо ви додасте файл .settings, додаток app.config буде автоматично додано для розміщення налаштувань, якщо у вас його ще немає.


1

Якщо ваш файл налаштувань знаходиться у веб-додатку, вони будуть знаходитись у файлі web.config (прямо під вашим проектом. Якщо вони є в будь-якому іншому проекті, вони будуть знаходитись у файлі app.config (також нижче вашого проекту) .

Редагувати

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


1
Неправильно. Файл налаштувань app.config у запущеній програмі не існує, оскільки app.config буде перейменований у [appname] .exe.config. І все одно цей файл буде містити лише параметри ApplicationScoped від settings.settins.
арбітр

@arbiter: Можливо, я неправильно зрозумів це питання, але, схоже, Адам запитував про за замовчуванням час дизайну. Вони зберігаються в app.config. Під час збирання файл app.config копіюється в каталог збірки і перейменовується в (theapp.exe.config). Однак якщо ви редагуєте цей файл безпосередньо (і працюєте у візуальній студії), ви ризикуєте, що вміст буде перезаписано наступного разу, коли ви створюєте. Підсумок: для розгорнутого додатка (або якщо ви працюєте за межами IDE) змініть файл name.exe.config). Якщо ви працюєте в VS, змініть або значення за замовчуванням у налаштуваннях, або app.config
JMarsch

0

Два файли: 1) Файл app.config або web.config. Налаштування її можна налаштувати після складання за допомогою текстового редактора. 2) Файл settings.designer.cs. Цей файл має автогенерований код для завантаження налаштування з конфігураційного файлу, але значення за замовчуванням також є у випадку, якщо у конфігураційному файлі немає конкретного параметра.


0

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

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