Практическое руководство. Чтение параметров приложения
В этой статье показано, как добавить простой параметр в файл 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#
- В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите пункт «Добавить >новый элемент». Откроется диалоговое окно Добавление нового элемента.
- Разверните установленные >элементы Visual C#.
- Выберите шаблон Файл конфигурации приложения в средней панели.
- Нажмите кнопку Добавить. В проект добавится файл с именем App.config.
Связанный контент
- Управление параметрами приложения (.NET)
- Схема файла конфигурации (.NET Framework)
- Настройка приложений .NET Framework
App.Config и Custom Configuration Sections
Данная статья может показаться банальной, но иногда что-то полезное забывается, а читать на импортном языке лень и книжки под рукой нет. Поэтому я, обратившись к гуглу, нашел хорошее описание процесса создания обработчика конфигурационной секции файла app.config в .net приложениях, перевел его, дополнил замечаниями (курсив) и комментариями и решил опубликовать.
Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции и получать значения, используя конструкцию вида:
ConfigurationManager.AppSettings["MyKey"]
Что ж, я давно хотел выяснить, как использовать возможности класса ConfigurationSection для описания и загрузки данных, определенных в моем собственном формате. После нескольких часов экспериментов и гугления я смог создать свою структуру данных в файле конфигурации и воспользоваться ей в своем приложении.
- ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
- ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
- 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 бронзовых знака
Вообще, конфигурация для того и используется, что при компиляции она помещается в папку с исполнительным файлом, соответственно существуют уже и готовые методы для работы с ним.