App config что это
Что такое App.config в С#.NET? Как это использовать?
Я сделал проект в С#.NET, где мой файл базы данных – это книга Excel. Так как местоположение строки подключения жестко закодировано в моем кодировании, нет никакой проблемы для ее установки в моей системе, но для других систем есть.
Есть ли способ предложить пользователю установить путь один раз после завершения установки приложения?
Ответы, которые я получил, это “Use App.Config”… может ли кто-нибудь сказать, что это за App.config и как его использовать в моем контексте здесь?
В своем простейшем случае app.config представляет собой XML файл с множеством предопределенных разделов конфигурации и поддерживает настраиваемые разделы конфигурации. Раздел “Конфигурация” представляет собой фрагмент XML со схемой, предназначенной для хранения некоторого типа информации.
Веб-приложения обычно имеют файл 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 во время выполнения
A. При компиляции приложения его файл app.config копируется в каталог bin 1 с именем, соответствующим вашему exe. Например, если ваш exe был назван “test.exe”, в каталоге bin должен быть “text.exe.config”. Вы можете изменить конфигурацию без перекомпиляции, но вам нужно будет отредактировать файл конфигурации, который был создан во время компиляции, а не оригинальный файл app.config.
1: Обратите внимание, что файлы web.config не перемещаются, а остаются в том же месте во время компиляции и развертывания. Единственное исключение – когда web.config преобразован.
.NET Core
Вы можете получить доступ к конфигурациям с помощью ConfigurationManager как показано в фрагменте кода ниже:
Примечание. ConfigurationSettings – это устаревший метод для получения информации о конфигурации.
App.Config – это файл XML, который используется в качестве файла конфигурации для вашего приложения. Другими словами, вы храните в нем любые настройки, которые вы можете изменить без необходимости изменения кода (и перекомпиляции). Он часто используется для хранения строк подключения.
Посмотрите эту статью MSDN о том, как это сделать.
Просто чтобы добавить что-то, чего мне не хватало во всех ответах – даже если это кажется глупым и очевидным, как только вы узнаете:
C#, способы хранения настроек программы
Введение
В интернете приведено очень много способов хранения настроек программы, но все они как-то разбросаны, поэтому я решил их собрать вместе и расписать, как этим пользоваться.
C# и app.config
На хабре уже была посвящена этому тема, поэтому… перейти
C# и Properties.Settings
Информация о Properties.Settings
Организация Properties.Settings — это обычный xml файл, который можно найти в папке пользователя:
С:\ Users \ [user name] \ AppData \ Local \ [ (Project Name) or (AssemblyCompany) ] \ [name project_cashBuild] \ [AssemblyVersion] \ user.config
Я создал 3-и переменные и выбрал область их использования: 2- область пользователь и 1- приложение.
Различие между областями просты. Область приложения можно только читать, а пользователь — изменять и читать.
Вернемся к переменным:
Результаты работы программы
Первый запуск, мы видим, что кол-во запусков равно 1. И теста в richTextBox1 нет.
Теперь напишем и сохраним текст.
При втором запуске мы видим, что текст сохранен, и кол-во запусков уже 2-ва.
Очень удобно использовать этот объект, если надо работать в разных областях видимости в одном проекте. Метод хорош, когда вам не надо, чтоб рядовой пользователь рылся в файлах настройки программы.
C# и ini-файлы
С ini-файлами все на оборот, они лежат в папке рядом с программой, что позволяет пользователю изменить настройки вне-программы. Данный способ хорош, если настройки программы заносятся вручную. Например, эмулятор для запуска игры без лицензии (тотже revLoader).
Теперь перейдем к нашей теме. Для работы с таким типом файлов, нам нужно создать класс по работе с ним. Создаем класс, например «IniFile», подключаем пространство имен, которых нет:
А теперь разбираем по-порядку:
Теперь переходим в основную программу.
Результаты работы программы
При первом запуска, у нас нет файла config.ini. Поэтому при проверке возвращаются fasle и мы приравниваем окно к минимальным параметрам.
Меняем параметры окна и жмем «Применить»
Редактируем файл config.ini руками и жмем загрузить.
На этом все, в следующий раз опишу работу с xml файлами и с бинарными файлами.
App.Config и Custom Configuration Sections
Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции и получать значения, используя конструкцию вида:
Что ж, я давно хотел выяснить, как использовать возможности класса ConfigurationSection для описания и загрузки данных, определенных в моем собственном формате. После нескольких часов экспериментов и гугления я смог создать свою структуру данных в файле конфигурации и воспользоваться ей в своем приложении.
Первое, что нам потребуется сделать, это добавить в наше приложение файл app.Config (если, конечно, вы этого еще не сделали). После чего открываем данный файл и копипастим следующий код между тегами :
Далее создадим нашу собственную секцию, которая будет реализовывать нашу собственную модель данных:
Замечание: если кому-то не нравиться добавление узлов командой add в данном примере, то всегда можно сделать свой собственный префикс, используя следующий код:
при определении коллекции элементов в структуре данных. Тогда в конфигурационном файле можно будет писать так:
Закончим модификации в файле конфигурации и перейдем к организации взаимодействия нашего приложения с ним.
Первым делом создадим класс-наследник от ConfigurationSection, что позволит нам взаимодействовать с нашей секцией в файле конфигурации через ConfigurationManager во время исполнения программы.
Атрибут ConfigurationProperty( «Folders» ) требуется для сопоставления свойства FolderItems с корневым узлом нашей структуры данных.
Класс FoldersCollection является наследником ConfigurationElementCollection, который обеспечивает взаимодействие с коллекцией наших элементов, описанных в app.config. Определяется класс так:
Последним нам нужно создать ConfigurationElement, класс который свяжет нас с конечными данными, определенными в конфигурационном файле.
Атрибут ConfigurationProperty(«folderType») требуется для того, что бы проассоциировать имя xml-атрибута в файле конфигурации. Остальные параметры атрибута такие как DefaultValue=»», IsKey=true, IsRequired=true определяют только различные опции применимые к свойствам.
Замечание: автор умалчивает, что при стандартном способе использования сеттер свойства FolderType, работать не будет, т.к. файл конфигурации обычно доступен только на чтение. Для того что бы представлялось возможным производить запись в файл конфигурации следует делать, например, так:
Конфигурация корпоративного мобильного приложения с помощью AppConfig
Если вы администратор в компании, где есть внутреннее мобильное приложение, неважно для чего – будь то обычный мессенджер или почта, или что-то особенное наподобие сканера штрих-кодов – рано или поздно перед вами встанет задача удаленной настройки и менеджмента приложений. Прописать конкретный id или адрес сервера во всех телефонах можно при помощи костылей, но есть и готовое решение – де-факто уже стандарт, который можно использовать совместно с одной из существующих EMM/UEM-платформ (Enterprise Mobile Management/Unified Endpoint Management).
В этой статье мы решили дать инструкцию, как сделать ваше Android-приложение конфигурируемым, если вы – его разработчик. То есть: что конкретно нужно изменить в вашем приложении, чтобы выполнить потребности корпоративной аудитории. А еще мы описали всю работу администратора на примере платформы Knox Manage.
Постановка задачи
В интервью с коллегами из НИИ СОКБ (Научно-испытательный институт систем обеспечения комплексной безопасности) мы сошлись на мнении, что современную корпоративную мобильную инфраструктуру уже нельзя представить без централизованной системы управления.
Например, в швейцарской железнодорожной компании SBB каждый из 30 000 сотрудников получает кастомизированный под рабочие задачи телефон – там не только почта и мессенджер, но и, к примеру, отправка сообщений о неисправностях. Возлагать на сотрудника задачу настройки всей этой периферии не только накладно в человеко-часах, но и чревато возможными ошибками в процессе. А еще в ряде случаев – например, при появлении сбоев – бывает проще полностью перепрошить и заново инициализировать телефон, чем искать ошибку. Поэтому, правильно выбранное решение для корпоративного приложения – значительно облегчает жизнь IТ администратора компании.
Обычно, при внедрении централизованных систем мы сталкиваемся с двумя задачами:
Общая схема решения
В качестве решения второй задачи существует механизм AppConfig, это не инициатива какой-то единичной компании, а действующая конвенция нескольких вендоров. Его суть кратко такова: разработчик реализует в своем мобильном приложении – почте, мессенджере, клиенте видеосвязи и т.д. – поддержку управляемых конфигураций (Managed Configurations), настраиваемых под конкретного пользователя. Разработчик решает, какие именно параметры в приложении можно задавать извне (идентификатор, имя пользователя, адрес сервера). Через корпоративный Google Play эти параметры попадают в EMM-систему. А она уже позволяет создавать управляемые конфигурации и удаленно назначать их определенным устройствам и пользователям.
Чтобы узнать, реализован ли такой функционал в конкретном приложении:
Общий процесс выглядит так:
Процесс адаптации корпоративного мобильного приложения к AppConfig
Предположим, что вам требуется удаленно ввести адрес и имя пользователя в почтовом клиенте. На примере Samsung Knox Manage интерфейс настройки этих параметров с помощью управляемой конфигурации будет выглядеть так:
Как разработчику добавить поддержку AppConfig в свое приложение?
Предположим, что мы разрабатываем мобильное приложение, в котором настраиваемый параметр – адрес сервера. Согласно рекомендациям Google, разработчик должен:
В результате этой несложной доработки, после публикации приложения в корпоративном Google Play, вы сможете получать настраиваемую конфигурацию с сервера:
Приложение до и после получения конфигурации с сервера
Как администратору сконфигурировать приложение через консоль Knox Manage?
Чтобы задать управляющие конфигурации, администратору нужно добавить само приложение через Knox Manage (KM) из корпоративного магазина Google Play, либо загрузить его со своего компьютера, как Managed Google Play Private (тогда публикация в корпоративный Google Play необязательна). Для задания новой конфигурации:
Приложение с введенным через консоль KM адресом сервера
Конфигурируем не только приложения, но и само устройство
В какой-то момент разработчики задумались: а что, если мы хотим настраивать не только приложения, но и параметры самого устройства аналогичным способом? OEMConfig — это новый стандарт для отправки конфигураций приложениям, написанным производителями устройств. Отправка производится посредством той же самой схемы в XML-формате. Этому стандарту следуют изготовители оборудования Android, что позволяет предоставить администраторам дополнительные возможности управления устройством. Так, на смартфонах Samsung с поддержкой Knox существует решение — Knox Service Plugin (KSP), его можно загрузить из Google Play. Но об этом мы поговорим в другой раз.
Дополнительные источники по теме:
Автор: Павел Лепеев,
Engineer, B2B Pre/Post Sales
Business Development Team
Samsung R&D Institute Russia
Cоздание файла App.Config c элементом connectionStrings
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 адрес.
Database — имя базы данных;
Uid — пользователь;
Pwd — пароль;
Каждый пара отделяется точкой запятой, а для установки значения используется знак равно.
Строка подключения может содержать множество других ключей, например:
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
Мало информации… трудно сказать в чём именно проблема.
conString.ConnectionString — это свойство, которое содержит значение connectionString в xml файле App.config
Если выдаёт null, то возможно допущена описка или неверно указано имя элемента в xml файле, либо что-то с его атрибутами.
Еще есть одна особенность. При создании файла конфига в окне создания пишу название файла например MyConnect.config а создается их 2. Первый с названием App.config. Я кстати который второй создался удалил сразу. Может быть в этом причина и зачем тогда студия создает второй?
Кстати компиляция и запуск приложения проходят нормально. Но при нажатии на кнопку, перебрасывает в студию и подсвечивает выше описанную строку с выделением на onnectionString.
Правильность написания уже несколько раз перепроверил, даже делал копипаст вашего кода. Сейчас с нуля еще раз попробую все пересоздать.
Ах да. Пользуюсь Visual Studio 2013 community