Перейти к содержимому

App config c как добавить

  • автор:

Практическое руководство. Чтение параметров приложения

В этой статье показано, как добавить простой параметр в файл App.config в приложении платформа .NET Framework, а затем считывать значение программным способом. Вместо чтения одного значения можно прочитать весь раздел или весь файл. Дополнительные примеры и сведения см. в ConfigurationManager документации.

Добавление файла App.config

Visual Studio упрощает добавление файлаApp.config в проект. После создания проекта платформа .NET Framework щелкните правой кнопкой мыши проект в Обозреватель решений и выберите команду Добавить>новый элемент. Выберите элемент Файл конфигурации приложения и нажмите кнопку Добавить.

Добавление параметра

Откройте файл App.config и добавьте следующий XML-код в элемент .

Доступ к параметру программным способом

Чтобы получить доступ к значению параметра в коде, получите значение путем индексирования в свойстве AppSettings . Свойство AppSettings упрощает получение данных из элемента файла конфигурации.

string occupation = ConfigurationManager.AppSettings["occupation"]; 

Конфигурация для библиотек

Хотя использовать файлы конфигурации для исполняемых приложений очень просто, это немного сложнее для библиотек классов. Библиотеки классов могут получать доступ к параметрам конфигурации так же, как и исполняемые приложения, однако параметры конфигурации должны существовать в файле App.config клиентского приложения. Даже если вы распространяете файлApp.config вместе с файлом сборки библиотеки, код библиотеки не будет читать файл. Кроме того, рассмотрите следующие способы использования параметров конфигурации в библиотеке классов:

  • Получите параметры конфигурации в клиентском приложении и передайте их в класс, экземпляр которого создается из библиотеки классов.
  • Реализуйте пользовательский тип раздела, расширяющий ConfigurationSection класс . Сохраните отдельный файл конфигурации для библиотеки классов, а затем укажите ссылку на файл конфигурации библиотеки из файла конфигурации клиентского приложения. Дополнительные сведения см. в разделе Практическое руководство. Создание настраиваемых разделов конфигурации с помощью ConfigurationSection.

См. также раздел

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Добавление файла конфигурации приложения в проект C#

Добавив файл конфигурации приложения (файл app.config) в проект C#, вы можете настроить способ, которым общеязыковая среда выполнения будет находить и загружать файлы сборки. Дополнительные сведения о файлах конфигурации приложения или сборках в .NET см. в статье о том, как среда выполнения находит сборки (платформа .NET Framework) и сборки в .NET.

Приложения UWP не содержат файл app.config.

При сборке проекта среда разработки автоматически копирует файл app.config, изменяет имя копии файла в соответствии с исполняемым файлом, а затем перемещает копию в каталог bin.

Добавление файла конфигурации приложения в проект C#

  1. В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите пункт «Добавить >новый элемент». Откроется диалоговое окно Добавление нового элемента.
  2. Разверните установленные >элементы Visual C#.
  3. Выберите шаблон Файл конфигурации приложения в средней панели.
  4. Нажмите кнопку Добавить. В проект добавится файл с именем App.config.

Связанный контент

  • Управление параметрами приложения (.NET)
  • Схема файла конфигурации (.NET Framework)
  • Настройка приложений .NET Framework

App.Config и Custom Configuration Sections

Данная статья может показаться банальной, но иногда что-то полезное забывается, а читать на импортном языке лень и книжки под рукой нет. Поэтому я, обратившись к гуглу, нашел хорошее описание процесса создания обработчика конфигурационной секции файла app.config в .net приложениях, перевел его, дополнил замечаниями (курсив) и комментариями и решил опубликовать.

Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции и получать значения, используя конструкцию вида:

 ConfigurationManager.AppSettings["MyKey"] 

Что ж, я давно хотел выяснить, как использовать возможности класса ConfigurationSection для описания и загрузки данных, определенных в моем собственном формате. После нескольких часов экспериментов и гугления я смог создать свою структуру данных в файле конфигурации и воспользоваться ей в своем приложении.

  1. ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
  2. ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
  3. ConfigurationElement — Это сам элемент, описывающий какую-от определенную вами сущность.

Первое, что нам потребуется сделать, это добавить в наше приложение файл app.Config (если, конечно, вы этого еще не сделали). После чего открываем данный файл и копипастим следующий код между тегами :

Замечание: данная секция должна располагаться в самом начале файла конфигурации, т.е. сразу после тега , иначе будут ошибки инициализации конфигурации.

Далее создадим нашу собственную секцию, которая будет реализовывать нашу собственную модель данных:

Замечание: если кому-то не нравиться добавление узлов командой 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, который обеспечивает взаимодействие с коллекцией наших элементов, описанных в app.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 определяют только различные опции применимые к свойствам.

Замечание: автор умалчивает, что при стандартном способе использования сеттер свойства FolderType, работать не будет, т.к. файл конфигурации обычно доступен только на чтение. Для того что бы представлялось возможным производить запись в файл конфигурации следует делать, например, так:

 Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); StartupFoldersConfigSection section = (StartupFoldersConfigSection)cfg.Section["StartupFolders"]; if ( section != null ) < System.Diagnostics.Debug.WriteLine( section.FolderItems[0].FolderType ); System.Diagnostics.Debug.WriteLine( section.FolderItems[0].Path ); section.FolderItems[0].Path = "C:\\Nanook"; cfg.Save(); //устанавливает перенос на новую строку и производит проверку .vshost.exe.config файла в вашей отладочной папке. > 

Итак, мы имеем все необходимые данные и классы, которые предоставляют нам возможность хранить в конфигурационном файле app.config пользовательскую структуру данных.
Использовать данный подход можно так:

 StartupFoldersConfigSection section = (StartupFoldersConfigSection)ConfigurationManager.GetSection( "StartupFolders" ); if ( section != null )

При этом не забываем прописать System.Configuration в список подключаемых пространств имен.

  • app.config
  • конфигурация .net
  • конфигурационная секция
  • ConfigurationSection

Путь к файлу через app.config

Знаю как в си шарпе указать путь к файлам, но это будет работать только на моем пк, при переносе программы на другой пк путь будет другой. Как можно правильно прописать путь к файлу через app.config что бы работало на разных пк?

Отслеживать
Joshua Higgs
задан 8 авг 2018 в 8:33
Joshua Higgs Joshua Higgs
55 7 7 бронзовых знаков

а что вы уже сделали? Вас интересует как получить строку с адресом, или вам нужно внести строку с адресом, или что? Ваш вопрос слишком общий что-бы дать на него однозначный и точный ответ!

8 авг 2018 в 8:36
Клади файлы в общие папки по типу AppData
8 авг 2018 в 8:38

Есть программа которая работает с файлами, сортирует и удаляет их, на моем пк делает это по одному пути, на другой машине путь будет другой. Интересует как сделать так, что бы не прописывать каждый раз новый путь, а в этом appconfig указать универсальный доступ к этим файлам @VladimirT

8 авг 2018 в 8:56
Хорошо, намекну, выложите сюда файл app.config, и обработчик который у вас получает данные!
8 авг 2018 в 9:11
в вопрос добавьте (отредактируйте)!
8 авг 2018 в 9:19

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Есть возможность указать относительный путь к нужному файлу.

К примеру, у вас исполняемый файл называется main.exe . Вам, например, нужно указать путь к файлу texture.png , находящемуся в папке img . Структура решения (проекта) VS для C# будет примерно такой:

/MyProject /bin main.exe /img texture.png main.cs 

Тогда относительный путь к файлу можно определить так:

String path = "..\\img\\texture.png" 

Отслеживать
ответ дан 8 авг 2018 в 8:56
Andrei Khotko Andrei Khotko
4,915 18 18 серебряных знаков 53 53 бронзовых знака

Вообще, конфигурация для того и используется, что при компиляции она помещается в папку с исполнительным файлом, соответственно существуют уже и готовые методы для работы с ним.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *