Обновить

Комментарии 22

Организация объекта Properties.Settings — это обычный xml файл, который можно найти в папке пользователя:

С:\ Users \ [user name] \ AppData \ Local \ [ (Project Name) or (AssemblyCompany) ] \ [name project_cashBuild] \ [AssemblyVersion] \ user.config

Вы про app.config/web.config ничего не слышали?

С ini-файлами все на оборот, они лежат в папке рядом с программой, что позволяет пользователю изменить настройки вне-программы. Данный способ хорош, если настройки программы заносятся вручную. Например, эмулятор для запуска игры без лицензии (тотже revLoader).

А зачем это надо, когда есть app.config?

Теперь перейдем к нашей теме. Для работы с таким типом файлов, нам нужно создать класс по работе с ним. Создаем класс, например «IniFile», подключаем пространство имен (библиотеки), которых нет:

Пространства имен — это не библиотеки.
Вы про app.config/web.config ничего не слышали?

Нет, не слышал.
А зачем это надо, когда есть app.config?

Хм… Интересно, упустил его. Спасибо за информацию.
Пространства имен — это не библиотеки.

Косяк, согласен. Исправил.
Нет, не слышал.

Ну так может стоит сначала разобраться в теме, о которой вы пришли писать статью на хабр? app/web.config — это первичное место для настроек программы на протяжении нескольких версий .net, а вы его «упустили».
Ну, начнем с того, что об этому уже писали на хабре, именно об app.config (статья). Так же я тут не затронул xml, в котором, тоже многие хранят настройки и не только.
В ini-файле удобней описывать конфигурацию, чем в xml. Особенно для программ, которые не имеют пользовательского интерфейса.
Так же можно разбить настройки в две категории:
  1. Программные — задаются разработчиком и находятся в app/web.config
  2. Пользовательские — задаются пользователем и живут в ini


А я, тем временем, буду продолжать учиться и набивать шишки на своих ошибках.
Ну, начнем с того, что об этому уже писали на хабре, именно об app.config

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

В ini-файле удобней описывать конфигурацию, чем в xml.

Кому удобнее?

Так же можно разбить настройки в две категории:
Программные — задаются разработчиком и находятся в app/web.config
Пользовательские — задаются пользователем и живут в ini

Если речь о десктопе, то зачем делать два механизма хранения настроек, когда есть один? Если речь о вебе, то как вы себе представляете хранение настроек в ini?
собрать вместе все способы хранения настроек

Да это есть цель. Буду пополнять, постепенно. Или же вторую сделаю. Посмотрю еще, как лучше.

Кому удобнее?

Пользователю. Юзверю проще разобраться с секцией и ключем, чем в xml файле.
(не знаю, как у других, но до изучения xml, было проще работаться с ini или похожими настройками)

Если речь о вебе, то как вы себе представляете хранение настроек в ini?
Но! Я не вел речи о вебе.
Пользователю. Юзверю проще разобраться с секцией и ключем, чем в xml файле.

А зачем неквалифицированному пользователю лезть в конфигурацию? А для квалифицированного xml не представляет проблем (особенно учитывая его поддержку современными редакторами).

Но! Я не вел речи о вебе.

В вебе настройки хранить не надо? Или для веба на C# не пишут?
В вебе настройки хранить не надо? Или для веба на C# не пишут?

Я разве сказал, что ему не нужна конфигурация? Я разве сказал, что не пишут? Что-то не припомню.
Веб тоже в них нуждается, но я не вел о нем речь. Затронута была тема десктопных приложений.

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

Где это в статье написано?

C# и app.config [...] C# и объект Properties.Settings

А ничего, что второе реализовано через первое?

(впрочем, «объекта» Properties.Settings вообще не существует, чего уж)
НЛО прилетело и опубликовало эту надпись здесь
Эцсамое. Берём JSON.NET, делаем иерархию классов настроек любой вложенности. Из сохранение сводится к
File.WriteAllText("settings.json", JObject.FromObject(settings).ToString())
, а загрузка к J
Object.Parse(File.ReadAllText("settings.json")).ToObject<Settings>()

Получаем строго типизированный конфиг с производной древовидной структурой и простотой задания умолчаний (они задаются прямо в коде как дефолтные значения свойств) в две строчки кода. Совместимо с coreclr/corefx, мобилками, да вообще со всем кроме разве что .NET Micro. Не вижу смысла пользоваться чем-то ещё.
Это то же самое, да.
Если настроек очень много, то можно еще использовать и Automapper.
но все они как-то разбросаны, поэтому я решил их собрать вместе и расписать
збросать теперь по хабру.
Как-будто в 2010 вернулся
В реальных проектах кто-то app.config использует? Лично я в своих проектах использую синглтон в виде Dictionary (на самом деле там переписанный на C# xml-движок для QSettings из Qt).
Спасибо за информацию, прочитаю, добавлю в статью.
Я использую (сильно больше одного проекта в разных компаниях).
Вообще много где и очень активно. И web.config то же. Особенно кастомные секции, внешние секции. QSettings там рядом не стоял.
НЛО прилетело и опубликовало эту надпись здесь
Для начинающих шарпистов статья вполне себе полезная
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации