Как создать файл app config
Файл конфигурации позволяет хранить параметры приложения в формате XML для одного и более вычислительного устройства.
Для того, чтобы ощутить всю мощь работы с конфигурационными файлами, создадим проект-консольное приложение, а затем добавим файл конфигурации.
В обозревателе решений правый клик мыши на проект -> Добавить (Add . ) -> Создать элемент (Create new)
Примечание: в старых версиях Visual Studio файл конфигурации добавляется через добавить -> создать новый -> выбираем "xml файл" в списке с элементами.
После добавления откроем файл конфига и лицезреем следующее:
Добавим раздел appSettings в наш файл, и затем элементы "ключ-значение" :
Здесь мы объявляем три переменные неявного типа, которым в то же время присваиваем значение элемента appSettings по ключу.
Очевидным образом, мы увидим следующий вывод на консоли:
Так как ConfigurationManager.AppSettings является NameValueCollection , косвенно наследуемым от IEnumerable , то нижеприведенный код имеет место быть:
Здесь мы получаем элементы appSettings в виде коллекции, затем берем у каждого элемента коллекции ключ и подставляем в метод Get, который впоследствии возвращает нам необходимое значение. То есть, мы получим тот же самый результат, но зато без явной подстановки ключей.
Итак, брать конфигурационные данные из стандартной секции appSettings мы научились. Едем дальше.
Для того, чтобы добавить свою собственную конфигурационную секцию, мы освободим поле боя, оставив консольное приложение и конфиг в первоначальном виде.
Теперь предоставим сведения о конфигурации пары имя/значение в разделе конфигурации:
Важно (!) секция configSections должна всегда быть в шапке файла конфигурации, тк она отвечает за инициализацию остальных секций. В ином случае приложение будет выдавать ошибки выполнения.
Что и как здесь происходит? Мы получаем секцию по имени в виде System.Object, приводим к NameValueCollection, и получаем значение элемента по ключу. Здесь все довольно просто.
Перейдем к самой сложной части данной статьи: создание структуры данных через App.Config (не рекомендуется для новичков)
Итак, для того что бы загрузить свою структуру данных из файла App.Config нам потребуются следующие классы:
ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
ConfigurationElement — Это сам элемент, описывающий какую-то определенную вами сущность.
Очистим поле боя и приведем секцию configSections к следующему виду:
Далее создадим нашу собственную секцию, которая будет реализовывать нашу собственную модель данных:
Замечание : если кому-то не нравится добавление узлов командой add в данном примере, то всегда можно сделать свой собственный префикс, используя следующий код:
при определении коллекции элементов в структуре данных. Тогда в конфигурационном файле можно будет писать так:
Закончим модификации в файле конфигурации и перейдем к организации взаимодействия нашего приложения с ним.
Первым делом создадим класс-наследник от ConfigurationSection, что позволит нам взаимодействовать с нашей секцией в файле конфигурации через ConfigurationManager во время исполнения программы.
Атрибут ConfigurationProperty("Folders") требуется для сопоставления свойства FolderItems с корневым узлом нашей структуры данных.
Класс FoldersCollection является наследником ConfigurationElementCollection, который обеспечивает взаимодействие с коллекцией наших элементов, описанных в Аpp.config . Определяется класс так:
Последним нам нужно создать ConfigurationElement , класс который свяжет нас с конечными данными, определенными в конфигурационном файле.
Атрибут ConfigurationProperty("folderType") требуется для того, что бы проассоциировать имя xml-атрибута в файле конфигурации. Остальные параметры атрибута такие как DefaultValue="", IsKey=true, IsRequired=true определяют только различные опции применимые к свойствам.
Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции <appSettings> и получать значения, используя конструкцию вида:
Что ж, я давно хотел выяснить, как использовать возможности класса ConfigurationSection для описания и загрузки данных, определенных в моем собственном формате. После нескольких часов экспериментов и гугления я смог создать свою структуру данных в файле конфигурации и воспользоваться ей в своем приложении.
- ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
- ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
- ConfigurationElement — Это сам элемент, описывающий какую-от определенную вами сущность.
Первое, что нам потребуется сделать, это добавить в наше приложение файл app.Config (если, конечно, вы этого еще не сделали). После чего открываем данный файл и копипастим следующий код между тегами <configuration>:
Замечание: данная секция должна располагаться в самом начале файла конфигурации, т.е. сразу после тега <configuration>, иначе будут ошибки инициализации конфигурации.
Далее создадим нашу собственную секцию, которая будет реализовывать нашу собственную модель данных:
Замечание: если кому-то не нравиться добавление узлов командой add в данном примере, то всегда можно сделать свой собственный префикс, используя следующий код:
при определении коллекции элементов в структуре данных. Тогда в конфигурационном файле можно будет писать так:
Закончим модификации в файле конфигурации и перейдем к организации взаимодействия нашего приложения с ним.
Первым делом создадим класс-наследник от ConfigurationSection, что позволит нам взаимодействовать с нашей секцией в файле конфигурации через ConfigurationManager во время исполнения программы.
Атрибут ConfigurationProperty( «Folders» ) требуется для сопоставления свойства FolderItems с корневым узлом нашей структуры данных.
Класс FoldersCollection является наследником ConfigurationElementCollection, который обеспечивает взаимодействие с коллекцией наших элементов, описанных в app.config. Определяется класс так:
Последним нам нужно создать ConfigurationElement, класс который свяжет нас с конечными данными, определенными в конфигурационном файле.
Атрибут ConfigurationProperty(«folderType») требуется для того, что бы проассоциировать имя xml-атрибута в файле конфигурации. Остальные параметры атрибута такие как DefaultValue="", IsKey=true, IsRequired=true определяют только различные опции применимые к свойствам.
Замечание: автор умалчивает, что при стандартном способе использования сеттер свойства FolderType, работать не будет, т.к. файл конфигурации обычно доступен только на чтение. Для того что бы представлялось возможным производить запись в файл конфигурации следует делать, например, так:
Cоздание файла App.Config c элементом connectionStrings
Продолжаем работать с приложением, созданным в предыдущей статье. Сегодня повысим гибкость, и переносимость нашего приложения, переместив строку подключения из кода программы в отдельный конфигурационный файл.
Создание и добавление файла App.Config
Чтобы создать конфигурационный файл необходимо выполнить несколько простых действий:
1. Перейдите в окно Solution Explorer
2. Нажмите правую кнопку мыши на имени текущего проекта
3. В появившемся контекстном меню выберите пункт Add, появиться дополнительное подменю, нажмите на пункт New Item.
4. Откроется диалоговое окно со списком шаблонов. Найдите шаблон с именем Application Configuration File, если требуется, измените, имя файла, после чего нажмите на кнопку Add.
В Solution Explorer появится добавленный файл App.Config.
Открываем добавленный файл, щелкнув по нему двойным кликом мыши в окне Solution Explorer.
Файл App.Config это обычный XML файл, внутри которого по умолчанию содержится строка декларации и один корневой элемент configuration. Сам же файл конфигурации, опять же по умолчанию, хранится в папке текущего проекта.
Если вы не знаете, что такое XML и как с ним работать, то прочитайте статью: Введение в язык XML, в которой вкратце изложены все основные моменты.
Создание и добавление элемента connectionStrings
Создадим новый элемент connectionStrings. Для этого сначала введите знак меньше ().
Внутри созданного элемента создадим ещё один элемент с именем add
Для данного элемента добавим несколько атрибутов. Чтобы добавить атрибут нажмите на клавишу пробел после слова add, появится меню авто подстановки.
Выберите атрибут name и нажмите на клавишу Enter
Внутри двойных кавычек укажите любое имя, например MysqlConStr.
Затем добавьте следующий атрибут connectionString
Внутри двойных кавычек нужно указать строку подключения, которая состоит из пары: ключ = значение.
Server указываем ip адрес или имя сервера, где лежит база данных MySQL. Предпочтительнее указывать ip адрес.
Каждый пара отделяется точкой запятой, а для установки значения используется знак равно.
Строка подключения может содержать множество других ключей, например:
Port по умолчанию MySQL сервер использует порт 3306 и его можно не указывать, но если же по какой-то причине номер порта был изменен, то его следует указать явно.
SslMode если при работе с базой данных вы хотите использовать безопасное соединение с сервером, то укажите для данного параметра одно из следующих значений:
Preferred если сервер поддерживает SSL (криптографический протокол, который обеспечивает безопасность связи) то будет установлено безопасное соединение, если нет, то обычное.
Required все подключения будут только через протокол ssl. Если же на сервере нет поддержки ssl, то при обычном подключении вы получите отказ в подключении к серверу.
Все остальные ключи и их описание можно найти на официальном сайте MySQL.
После добавления строки подключения, добавим ещё один атрибут providerName, который будет хранить имя поставщика данных.
полное содержимое файла App.Config
Таким же образом можно указать любое количество строк подключения и поставщиков данных к разным базам данных: MSSQL, Oracle, Access, например:
Ещё одним преимуществом файлов конфигурации, является быстрое изменение данных, которое не требует перекомпиляции проекта, ведь достаточно всего лишь внести изменения в файл XML, который является отдельным файлом.
Получение данных из файла конфигурации
Конфигурационный файл создан и теперь осталось научиться читать данные из файла App.Config.
Для начала нужно подключить в проект сборку (dll файл) System.Configuration;
2. Чтобы при написании кода обращаться к типам и членам, не используя полных имен, добавьте следующую строку:
В предыдущей статье строка подключения была создана при помощи объекта типа MySqlConnectionStringBuilder (полный исходник здесь)
Удалим весь блок кода, а так же строку
Затем напишем следующий код:
В квадратных скобках указываем значение атрибута name элемента add. В результате в объекте conString мы получаем все значения элементов и атрибутов файла App.Config.
И последнее, что осталось сделать, это передать в объект MySqlConnection созданную строку подключения.
Либо можно сразу же не создавая объект ConnectionStringSettings передать в конструктор класса MySqlConnection конструкцию следующего вида:
8 thoughts to “Cоздание файла App.Config c элементом connectionStrings”
А у меня в этой строке выкидывает какое то исключение. Я пока только обучаюсь и не особо могу понять, что к чему.
Что то ругается именно на ConnectionString в кавычках.
Предупреждение типа NullReferenceException was unhandled
Если выдаёт null, то возможно допущена описка или неверно указано имя элемента в xml файле, либо что-то с его атрибутами.
Общие режимы профиля:
<configuration>
<configSections> // Область объявления раздела конфигурации, включая раздел конфигурации и объявление пространства имен
<section> // Оператор раздела конфигурации
<sectionGroup> // Определение группы раздела конфигурации
<section> Оператор раздела конфигурации в группе раздела конфигурации
<appSettings> // Предварительно определенный раздел конфигурации
<Пользовательский элемент для раздела конфигурации> // Область настройки раздела конфигурации
Ниже приведен пример наиболее распространенного файла конфигурации приложения, содержащего только раздел appSettings:
В предопределенном разделе appSettings (обратите внимание на случай) есть много элементов, все имена которых - «добавить», а два атрибута - «ключ» и «значение».
Примечание. Теперь в Net FrameWork 2.0 четко указано, что этот атрибут ConfigurationSettings устарел, и его рекомендуется изменить на ConfigurationManager или WebConfigurationManager.
После добавления ссылки вы можете использовать ConfigurationManager.AppSettings ["Key"] для чтения соответствующего значения.
Однако свойство ConfigurationManager.AppSettings доступно только для чтения и не поддерживает изменение значений свойств. Это связано с тем, что Microsoft не рекомендует динамически записывать файл app.config, но рекомендует после ручной настройки только статический доступ во время работы программы.
Если вам действительно нужно внести изменения в программу, то есть написать App.Config, продолжайте читать.
Во-вторых, операции чтения и записи раздела конфигурации appSettings.
Метод чтения раздела appSettings файла App.config относительно прост. Доступ к нему можно получить с помощью вышеупомянутого метода System.Configuration.ConfigurationManager.AppSettings ["Key"], но, как упоминалось ранее, этот метод не обеспечивает запись.
Если вы хотите написать файл конфигурации, вы можете использовать объект ConfigurationManager для выполнения операции открытия файла конфигурации, будет возвращен объект конфигурации, и операция может быть выполнена с использованием этого объекта (добавление, удаление, изменение и проверка все возможно).
Код реализации приведен ниже (добавьте ссылку на использование пространства имен System.Configuration)
1. Доступ к элементу <add> на основе несуществующего значения Key или даже использование метода remove () для удаления несуществующего элемента не вызовет исключения, первый вернет null.
2. Добавление существующего элемента <add> не вызовет исключения, но объединит существующее значение и новое значение, разделенные знаком «,», например: «olldvalue, newvalue».
3. После компиляции проекта под файлом bin \ Debuge в рабочем каталоге появятся два файла конфигурации, один с именем «ProjectName.exe.config», а другой с именем «ProjectName.vshost.exe.config». Первый файл - это файл конфигурации, фактически используемый проектом, и все изменения, внесенные во время работы программы, будут сохранены здесь; второй файл на самом деле является файлом синхронизации «App.config» в исходном коде, то есть не изменится.
4. Обратите особое внимание на регистр (файлы XML чувствительны к регистру), например, в разделе конфигурации appSettings.
Есть ли способ предложить пользователю установить путь один раз после завершения установки приложения?
Настройки можно настроить с помощью встроенных конфигурационных разделов, таких как connectionStrings или appSettings . Вы можете добавить свои собственные разделы конфигурации; это расширенная тема, но очень мощная для создания файлов с типизированной типизацией.
Веб-приложения обычно имеют файл web.config, в то время как графические пользовательские приложения Windows имеют файл app.config.
Конфигурационные файлы на уровне приложения наследуют настройки из глобальных файлов конфигурации, например. machine.config.
Чтение из App.Config
Строки подключения имеют предопределенную схему, которую вы можете использовать. Обратите внимание, что этот небольшой фрагмент фактически является допустимым файлом app.config(или web.config):
После того, как вы определили свой app.config, вы можете прочитать его в коде, используя класс ConfigurationManager. Не пугайтесь подробных примеров MSDN; это на самом деле довольно просто.
Запись в App.Config
Частое изменение файлов *.config обычно не является хорошей идеей, но похоже, что вы хотите только выполнить одноразовую настройку.
Смотрите: Измените строку подключения и перезагрузите app.config во время выполнения, в котором описывается, как обновить раздел connectionStrings файла *.config во время выполнения.
Обратите внимание, что в идеале вы должны выполнить такие изменения конфигурации от простого установщика.
Расположение App.Config во время выполнения
Q. Предположим, что я вручную изменяю некоторые <value> в app.config, сохраняю его и закрываю. Теперь, когда я перехожу в папку bin и запускаю файл .exe отсюда, почему он не отражает внесенные изменения?
Вы можете получить доступ к конфигурациям с помощью ConfigurationManager как показано в фрагменте кода ниже:
Посмотрите эту статью MSDN о том, как это сделать.
Читайте также: