В данной статье будет разобраны основы работы с конфигурационными файлами, секциями конфигурации и созданием своих конфигурационных разделов. Перед прочтением рекомендуется ознакомиться с языком разметки xml, индексаторами, свойствами, приведением типов и всем C# в целом.
Файл конфигурации позволяет хранить параметры приложения в формате XML для одного и более вычислительного устройства.
System.Configuration и Microsoft платформа.NET Framework пространства имен System.Collections.Specialized содержат классы, необходимые для извлечения информации из файла конфигурации приложения .NET во время выполнения.
Для того, чтобы ощутить всю мощь работы с конфигурационными файлами, создадим проект-консольное приложение, а затем добавим файл конфигурации.
Сделать это можно следующим образом:
В обозревателе решений правый клик мыши на проект -> Добавить (Add . ) -> Создать элемент (Create new)
Далее видим список с доступными для добавления элементами (появившемся окне по дефолту выделен пункт Элементы Visual C#).
Поиск и устранение всех ошибок Windows. Как исправить ошибку?
Находим «файл конфигурации приложения» или «Configuration file», задаем имя файла, жмем «Добавить» и радуемся на 10%.
Примечание: в старых версиях Visual Studio файл конфигурации добавляется через добавить -> создать новый -> выбираем «xml файл» в списке с элементами.
После добавления откроем файл конфига и лицезреем следующее:
Скопировать в буфер
Добавим раздел appSettings в наш файл, и затем элементы «ключ-значение» :
Скопировать в буфер
Что мы имеем? Стандартный конфигурационный раздел приложения appSettings, в котором содержится три элемента-ключа: KeyA, KeyB, KeyC.
Обращаясь к разделу с ключом, мы извлекаем по нему значение. Практический пример извлечения данных по ключу мы рассмотрим ниже.
Важно (!): перед тем, как начать работать с конфигурационными файлами из кода C#, нам необходимо добавить ссылку на сборку System.Configuration .
Для этого в обозревателе решений сделаем правый клик по элементу списка в проекте с названием Ссылки (References) -> Добавить ссылку (Add Reference) и в появившемся окне в разделе «Сборки» находим в списке сборок System.Configuration , слева от которой нужно поставить галочку в чекбоксе и нажать Ok.
Готово. Теперь нам доступны классы и методы для работы с конфигурационными файлами. Здесь начинается самое интересное.
Откроем наш класс программы и введем в метод Main следующий код:
Скопировать в буфер
var a = ConfigurationManager.AppSettings.Get(«KeyA»); var b = ConfigurationManager.AppSettings.Get(«KeyB»); var c = ConfigurationManager.AppSettings.Get(«KeyC»); // var a = ConfigurationManager.AppSettings[«KeyA»]; // var b = ConfigurationManager.AppSettings[«KeyB»]; // так тоже можно записать. результат будет идентичен // var c = ConfigurationManager.AppSettings[«KeyC»]; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);
Здесь мы объявляем три переменные неявного типа, которым в то же время присваиваем значение элемента appSettings по ключу.
Как найти путь к файлу или папке программы
Очевидным образом, мы увидим следующий вывод на консоли:
Скопировать в буфер
Msey Love Goosey
Так как ConfigurationManager.AppSettings является NameValueCollection , косвенно наследуемым от IEnumerable , то нижеприведенный код имеет место быть:
Скопировать в буфер
var settings = ConfigurationManager.AppSettings; foreach (var key in settings.AllKeys)
Здесь мы получаем элементы appSettings в виде коллекции, затем берем у каждого элемента коллекции ключ и подставляем в метод Get, который впоследствии возвращает нам необходимое значение. То есть, мы получим тот же самый результат, но зато без явной подстановки ключей.
Итак, брать конфигурационные данные из стандартной секции appSettings мы научились. Едем дальше.
Собственные конфигурационные секции.
Для того, чтобы добавить свою собственную конфигурационную секцию, мы освободим поле боя, оставив консольное приложение и конфиг в первоначальном виде.
Структура configSections :
Скопировать в буфер
Теперь предоставим сведения о конфигурации пары имя/значение в разделе конфигурации:
Скопировать в буфер
Важно (!) секция configSections должна всегда быть в шапке файла конфигурации, тк она отвечает за инициализацию остальных секций. В ином случае приложение будет выдавать ошибки выполнения.
В коде программы напишем следующее:
Скопировать в буфер
var customValue = (ConfigurationManager.GetSection(«customSection») as NameValueCollection).Get(«KeyFromCustomSection»); Console.WriteLine(customValue);
Вывод будет принимать подобный вид:
valueFromCustomSection
Что и как здесь происходит? Мы получаем секцию по имени в виде System.Object, приводим к NameValueCollection, и получаем значение элемента по ключу.
Здесь все довольно просто.
Перейдем к самой сложной части данной статьи: создание структуры данных через App.Config (не рекомендуется для новичков)
Итак, для того что бы загрузить свою структуру данных из файла App.Config нам потребуются следующие классы:
ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
ConfigurationElement — Это сам элемент, описывающий какую-то определенную вами сущность.
Очистим поле боя и приведем секцию configSections к следующему виду:
Скопировать в буфер
Далее создадим нашу собственную секцию, которая будет реализовывать нашу собственную модель данных:
Скопировать в буфер
Замечание : если кому-то не нравится добавление узлов командой add в данном примере, то всегда можно сделать свой собственный префикс, используя следующий код:
Скопировать в буфер
[ConfigurationCollection(typeof(FolderElement)), AddItemName = «Folder»] public class FoldersCollection : ConfigurationElementCollection
при определении коллекции элементов в структуре данных. Тогда в конфигурационном файле можно будет писать так:
Скопировать в буфер
Закончим модификации в файле конфигурации и перейдем к организации взаимодействия нашего приложения с ним.
Первым делом создадим класс-наследник от ConfigurationSection, что позволит нам взаимодействовать с нашей секцией в файле конфигурации через ConfigurationManager во время исполнения программы.
Скопировать в буфер
public class StartupFoldersConfigSection : ConfigurationSection < [ConfigurationProperty( «Folders» )] public FoldersCollection FolderItems < get < return ( (FoldersCollection)( base[ «Folders» ] ) ); >> >
Атрибут ConfigurationProperty(«Folders») требуется для сопоставления свойства FolderItems с корневым узлом нашей структуры данных.
Класс FoldersCollection является наследником ConfigurationElementCollection, который обеспечивает взаимодействие с коллекцией наших элементов, описанных в Аpp.config . Определяется класс так:
Скопировать в буфер
[ConfigurationCollection(typeof(FolderElement))] public class FoldersCollection : ConfigurationElementCollection < protected override ConfigurationElement CreateNewElement() < return new FolderElement(); >protected override object GetElementKey(ConfigurationElement element ) < return ((FolderElement)(element)).FolderType; >public FolderElement this[int idx] < get> >
Последним нам нужно создать ConfigurationElement , класс который свяжет нас с конечными данными, определенными в конфигурационном файле.
Скопировать в буфер
public class FolderElement : ConfigurationElement < [ConfigurationProperty(«folderType», DefaultValue=»», IsKey=true, IsRequired=true)] public string FolderType < get set > [ConfigurationProperty( «path», DefaultValue = «», IsKey = false, IsRequired = false )] public string Path < getset > >
Атрибут ConfigurationProperty(«folderType») требуется для того, что бы проассоциировать имя xml-атрибута в файле конфигурации. Остальные параметры атрибута такие как DefaultValue=»», IsKey=true, IsRequired=true определяют только различные опции применимые к свойствам.
Итак, мы имеем все необходимые данные и классы, которые предоставляют нам возможность хранить в конфигурационном файле app.config пользовательскую структуру данных.
Использовать данный подход можно так:
Скопировать в буфер
StartupFoldersConfigSection section = (StartupFoldersConfigSection)ConfigurationManager.GetSection( «StartupFolders» ); if ( section != null )
Источник: xgm.guru
Практическое руководство. Добавление файла конфигурации приложения в проект C#
Область применения:Visual Studio
Visual Studio для Mac
Visual Studio Code
Добавив файл конфигурации приложения (файл app.config) в проект C#, вы можете настроить способ, которым общеязыковая среда выполнения будет находить и загружать файлы сборки. Дополнительные сведения о файлах конфигурации приложений или сборках в .NET см. в статье Как среда выполнения находит сборки (платформа .NET Framework) и Сборки в .NET.
Приложения UWP не содержат файл app.config.
При сборке проекта среда разработки автоматически копирует файл app.config, изменяет имя копии файла в соответствии с исполняемым файлом, а затем перемещает копию в каталог bin.
Добавление файла конфигурации приложения в проект C#
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите Добавить>новый элемент. Откроется диалоговое окно Добавление нового элемента.
- Разверните узел Установленные>элементы Visual C#.
- Выберите шаблон Файл конфигурации приложения в средней панели.
- Нажмите кнопку Добавить. В проект добавится файл с именем App.config.
См. также раздел
- Управление параметрами приложения (.NET)
- Схема файла конфигурации (.NET Framework)
- Настройка приложений .NET Framework
Источник: learn.microsoft.com
Что такое файлы конфигурации и как их редактировать?
Подавляющее большинство используемых нами компьютерных программ — будь то офисные пакеты, веб-браузеры или даже видеоигры — настраиваются через систему интерфейсов меню. Это стало практически стандартным способом использования наших машин. Но некоторые программы требуют, чтобы вы сделали шаг за этим, и вам действительно нужно отредактировать текстовый файл, чтобы заставить их работать так, как вы хотите.
Эти текстовые файлы, что неудивительно, называются «конфигурационными файлами». Если вы хотите перейти от «пользователя» к «продвинутому пользователю», вам нужно знать, как их настроить.
Что такое файлы конфигурации?
Прежде чем мы углубимся в технические подробности, давайте сначала конкретно определим, что такое файл конфигурации.
Файлы конфигурации — это, по сути, файлы, которые содержат информацию, необходимую для успешной работы программы, которые структурированы особым образом. Вместо того, чтобы быть жестко запрограммированными в программе, они настраиваются пользователем и, как правило, хранятся в текстовом файле (хотя ранее я видел программы, которые использовали базы данных SQLite. как их конфигурационные файлы).
Удивительно, но не существует определенного стандарта о том, как должны работать файлы конфигурации или как они должны выглядеть. Это полностью зависит от прихоти разработчика программы.
Некоторые конфигурационные файлы структурированы в формате собственного дизайна разработчика. Другие используют широко известные стандарты, используемые для структурирования данных, такие как формат JSON (нотация объектов JavaScript), YAML (язык разметки YAML) или XML (расширяемый язык разметки). Некоторые программы загружают информацию, хранящуюся в их конфигурационных файлах, когда они запускаются, в то время как другие периодически проверяют, была ли она изменена.
Если вы пользователь Linux, вы, вероятно, будете знакомы с ними, так как многие основные задачи обслуживания требуют редактирования файлов конфигурации. Если вы хотите настроить GRUB для двойной загрузки вашей системы загрузку загрузку или настройке веб-сервера настроить веб-сервер , вам придется иметь дело с ними.
Хотя это не исключительно Linux вещь. В зависимости от того, что вы делаете, вам, возможно, придется редактировать их в Windows или Mac OS X.
Как выглядят файлы конфигурации?
Теперь давайте взглянем на некоторые реальные конфигурационные файлы. Как мы упоминали ранее, они бывают разных форм и размеров. Один файл конфигурации, с которым вы почти наверняка знакомы, — это файл hosts, который используется в Windows, Mac и Linux для сопоставления IP-адресов с именами узлов вручную.
В Windows вы можете найти его в папке c: windows system32 drivers etc hosts . На Mac и Linux это будет в / etc / hosts .
Как вы заметите, файл hosts использует пробелы для разделения элементов, причем каждое имя хоста имеет свою собственную строку. Кроме того, файл hosts позволяет пользователю добавлять аннотации и комментарии, которые начинаются с символа хеша.
В Linux и Mac OS X некоторые программы требуют, чтобы пользователь сохранял файл конфигурации в домашнем каталоге с точкой в начале имени файла. Эти конфигурационные файлы иногда имеют расширение .rc, и в разговорной речи называются «точечные файлы».
Одна из программ, которая следует этому конкретному соглашению, — текстовый редактор Vim . В прошлом мы говорили о том, как настроить VIM, отредактировав его конфигурационный файл настроек настроек
Файлы конфигурации даже используются в видеоиграх для определения и управления некоторыми действиями, такими как сопоставления клавиш. Конфигурационный файл ниже взят из Black Mesa — фанатского ремейка оригинального Half Life .
В оригинальной версии Deus Ex , выпущенной в 2000 году, пользователю фактически пришлось отредактировать файл конфигурации, чтобы включить читы!
Как редактировать файлы конфигурации
Итак, теперь мы знаем, для чего используются файлы конфигурации, давайте поговорим о том, как мы можем их редактировать.
Для этого вам понадобится текстовый редактор. Не используйте текстовый процессор, так как они могут добавить форматирование в файл, что помешает их чтению программой.
Пользователи Windows уже имеют предустановленный текстовый редактор. Я говорю о блокноте. Хотя стоит подчеркнуть, что для Windows существует множество отличных текстовых редакторов сторонних производителей, включая Notepad ++, Atom и Sublime Text Editor.
В Linux наиболее близким аналогом Notepad является Gedit . Вы также можете рассмотреть возможность использования текстового редактора командной строки, такого как Nano или Vim . Ради большей эффективности я сильно склоняюсь к текстовому редактору Vim. Это позволяет мне легко переходить на разные позиции в файле конфигурации, просто используя всего несколько нажатий клавиш.
В Mac OS X (или MacOS Sierra, скоро станет известно, ), есть несколько текстовых редакторов, которые поставляются предварительно установленными. Вы, вероятно, знакомы с TextMate. Он также включает несколько текстовых редакторов командной строки, таких как Vim и Nano.
Когда вы редактируете файл, важно убедиться, что вы соблюдаете его соглашения. Это можно решить, просто взглянув на это. Некоторые конфигурационные файлы, такие как файл hosts, объяснят вам эти соглашения. Другие заставят вас прочитать некоторую документацию или пару постов в блоге.
Наконец, если редактируемый файл конфигурации структурирован в формате JSON или XML, вы можете использовать более мощный текстовый редактор с подсветкой синтаксиса. Я рекомендую Атом. Это повысит вашу точность, показывая, когда вы допустили ошибку.
Что, если это не работает?
Наконец, давайте коснемся того, что происходит, когда что-то идет не так. По моему опыту, проблемы, связанные с редактированием конфигурационных файлов, имеют тенденцию делиться на два лагеря.
Первый — это разрешения. Если вы не можете сохранить свои изменения, это может быть потому, что вы пытаетесь сделать это как обычный пользователь. Чтобы предотвратить случайное повреждение, многие конфигурационные файлы доступны для редактирования только тем, у кого есть права администратора.
Исправить это легко. В Mac и Linux попробуйте повысить свои права с помощью команды sudo. Итак, если вы редактировали файл hosts, вы бы запустили:
sudo nano / etc / hosts
В Windows щелкните правой кнопкой мыши Блокнот (или любой текстовый редактор, который вы используете) и выберите Запуск от имени администратора .
Вторая распространенная проблема — ошибка пользователя. Если что-то не работает, это может быть ваша вина. Убедитесь, что вы не сделали никаких опечаток, и что вы следовали соглашениям файла конфигурации. Я знаю, это кажется очевидным, но простая орфографическая ошибка или забывание закрыть пару речевых меток может сделать весь файл бесполезным.
Хороший способ избежать проблем — сделать копию файла конфигурации, прежде чем вносить какие-либо изменения. Таким образом, если что-то пойдет не так, вы можете восстановить копию и начать заново!
Файлы конфигурации важны
Более того, они являются неотъемлемой частью использования Linux. Знание того, как правильно их редактировать, поможет вам бесконечно.
Есть ли какие-то другие важные навыки, которые, по вашему мнению, должны знать пользователи Linux от начального до среднего уровня? Позвольте мне знать в комментариях ниже.
Источник: gadgetshelp.com