Что такое App.config в C # .NET? Как это использовать?

179

Я сделал проект в C # .NET, где мой файл базы данных представляет собой книгу Excel. Так как расположение строки соединения жестко задано в моей кодировке, нет проблем с ее установкой в ​​моей системе, но для других систем она существует.

Есть ли способ предложить пользователю указать путь после завершения установки приложения?

Ответы, которые я получил, были «Использовать App.Config» ... Кто-нибудь может сказать, что это за App.config и как использовать его в моем контексте здесь?

Shyam
источник
4
Возможный дубликат для чего app.config?
пользователь

Ответы:

190

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

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

У веб-приложений обычно есть web.config, а в приложениях с графическим интерфейсом и службами Windows есть файл app.config.

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

Чтение из App.Config

Строки подключения имеют предопределенную схему, которую вы можете использовать. Обратите внимание, что этот небольшой фрагмент на самом деле является действительным файлом app.config (или web.config):

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

После того как вы определили свой app.config, вы можете прочитать его в коде, используя класс ConfigurationManager . Не пугайтесь многословных примеров MSDN; это на самом деле довольно просто.

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

Запись в App.Config

Частое изменение файлов * .config, как правило, не очень хорошая идея, но похоже, что вы хотите выполнить единовременную настройку.

См. Изменение строки подключения и перезагрузка app.config во время выполнения, в котором описано, как обновить connectionStringsраздел файла * .config во время выполнения.

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

Расположение App.Config во время выполнения

В : Предположим, я вручную изменил некоторые данные <value>в app.config, сохранил их и затем закрыл. Теперь, когда я захожу в папку bin и запускаю отсюда файл .exe, почему он не отражает примененные изменения?

A : Когда вы компилируете приложение, его app.config копируется в каталог bin 1 с именем, соответствующим вашему exe. Например, если ваш exe-файл был назван «test.exe», в каталоге bin должен быть «text.exe.config». Вы можете изменить конфигурацию без перекомпиляции, но вам нужно будет отредактировать файл конфигурации, созданный во время компиляции, а не исходный файл app.config.

1: обратите внимание, что файлы web.config не перемещаются, а остаются в том же месте во время компиляции и развертывания. Единственное исключение - когда преобразуется web.config .

.NET Core

Новые параметры конфигурации были введены с .NET Core. Способ работы файлов * .config, по-видимому, не изменился, но разработчики могут выбирать новые, более гибкие парадигмы конфигурации.

Тим Медора
источник
См. Также: codeproject.com/Articles/16466/… за отличный обзор того, как работают файлы конфигурации
BKSpurgeon
56

Проще говоря , App.config - это XMLформат файла на основе, который содержит конфигурации уровня приложения .

Пример:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

Вы можете получить доступ к конфигурациям, используя, ConfigurationManagerкак показано в фрагменте кода ниже:

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

Примечание: ConfigurationSettings это устаревший метод для получения информации о конфигурации.

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];
Фуркан Сафдар
источник
21
Вы должны ссылаться System.Configuration.dll, чтобы использовать вышеупомянутые API.
KFL
2
Во-первых, вы не должны хранить строки подключения в разделе AppSettings, они идут в разделе ConnectionStrings. Во-вторых, Visual Studio сгенерирует строго типизированные свойства для ваших настроек, если вы создадите их правильно с помощью дизайнера, вам никогда не придется вводить имя ключа вручную (как в приведенном выше коде).
BrainSlugs83
1
Мы говорим не о лучших практиках, а о решении проблемы ОП.
Фуркан Сафдар
2
System.Configuration.ConfigurationManager.AppSettings["Key"]уже является строкой, вызывая ToString()ее излишне
Богдан Стэнческу
4

Просто чтобы добавить что-то, чего мне не хватало во всех ответах - даже если это кажется глупым и очевидным, как только вы узнаете:

Файл должен называться «App.config» или «app.config» и может находиться в вашем проекте на том же уровне, что и, например, Program.cs.

Я не знаю, возможны ли другие местоположения, другие имена (например, application.conf, как предложено в документации ODP.net) не работали для меня.

PS. Я начал с Visual Studio Code и создал новый проект с «dotnet new». Файл конфигурации не создается в этом случае, я уверен, что есть другие случаи. PPS. Вам может потребоваться добавить пакет nuget, чтобы иметь возможность прочитать файл конфигурации, в случае .NET CORE это будет «пакет добавления dotnet System.Configuration.ConfigurationManager --version 4.5.0»

Dantel35
источник
это то, что я искал. Нужно знать, на каком уровне его включать. Некоторые программы / фреймворки выглядят в папках как/resources
alex
3

App.Config - это файл XML, который используется в качестве файла конфигурации для вашего приложения. Другими словами, вы храните в нем любые настройки, которые вы можете изменить, не изменяя код (и не перекомпилируя). Он часто используется для хранения строк подключения.

Посмотрите эту статью MSDN о том, как это сделать.

Система не работает
источник
1

Вы можете получить доступ к ключам в App.Config используя:

ConfigurationSettings.AppSettings["KeyName"]

Взгляните на эту тему

CloudyMarble
источник
16
сейчас он считается устаревшим
mikus 30.10.13
0

Просто добавив еще один пункт

Используя app.config, вы можете применить определенные изменения ко всему приложению, использовать файл конфигурации приложения и получить доступ к настройкам, как показано ниже: ConfigurationSettings.AppSettings ["Key"]

Гуммадидала Шива
источник