Чтение настроек из app.config или web.config в .net

Я работаю над библиотекой классов С#, которая должна быть в состоянии читать настройки из файла web.config или app.config (в зависимости от того, ссылается ли DLL из веб-приложения ASP.NET или приложения Windows Forms).

Я обнаружил, что

ConfigurationSettings.AppSettings.Get("MySetting")

работает, но этот код был отмечен как устаревший Microsoft.

Я читал, что должен использовать:

ConfigurationManager.AppSettings["MySetting"]

Однако класс System.Configuration.ConfigurationManager, похоже, не доступен из проекта библиотеки классов С#.

Кто-нибудь знает, что лучший способ сделать это?

+733
27 июл. '09 в 16:58
источник поделиться
23 ответа

Вам нужно добавить ссылку в System.Configuration в папку ссылок.

Вы должны использовать ConfigurationManager для устаревшего ConfigurationSettings.

+745
27 июл. '09 в 17:00
источник

Для примера App.config, как показано ниже:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="countoffiles" value="7" />
    <add key="logfilelocation" value="abc.txt" />
  </appSettings>
</configuration>

Вы прочитали вышеуказанные настройки приложения, используя код, показанный ниже:

using System.Configuration;

Вам также может понадобиться добавить ссылку на System.Configuration в ваш проект, если ее еще нет. Затем вы можете получить доступ к значениям следующим образом:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];

Надеюсь это поможет!

+796
15 окт. '12 в 8:47
источник

Связанные вопросы


Похожие вопросы

Обновление для фреймворков 4.5 и 4.6; следующее больше не будет работать:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

Теперь перейдите в класс настроек через Properties:

string keyvalue= Properties.Settings.Default.keyname;

Подробнее см. "Управление настройками приложения" .

+71
21 авг. '15 в 18:24
источник

Щелкните правой кнопкой мыши на своей библиотеке классов и выберите "Добавить ссылки" в меню; и, наконец, с вкладки .NET выберите System.Configuration. Это будет включать DLL System.Configuration в ваш проект.

+36
27 июл. '09 в 17:51
источник

Я использую это, и он хорошо работает для меня

textBox1.Text = ConfigurationManager.AppSettings["Name"];
+29
30 нояб. '11 в 23:15
источник

Чтение из конфигурации:

Вам нужно добавить ссылку на Config

  • Откройте "Свойства" в вашем проекте
  • Перейдите на вкладку "Настройки"
  • Добавьте "Имя" и "Значение"
  • Получить значение с помощью следующего кода:

    string value = Properties.Settings.Default.keyname;

Сохранить в настройках:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
+22
07 авг. '16 в 12:29
источник

Вы должны добавить в проект ссылку на сборку System.Configuration.

+21
27 июл. '09 в 17:01
источник

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

Скажем, у вас есть два проекта в вашем решении:

  • SomeDll
  • SomeExe

Возможно, проблема связана с тем, что вы включили app.config в SomeDLL, а не в SomeExe. SomeDll может прочитать конфигурацию из проекта SomeExe.

+17
12 июн. '13 в 18:59
источник

Попробуйте следующее:

string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];

В web.config должна быть следующая структура:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
+9
16 нояб. '14 в 6:12
источник

У меня была та же проблема, просто прочитайте их следующим образом:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
+8
16 окт. '13 в 10:53
источник

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

app.config используется для приложений Windows. Когда вы создаете приложение в vs.net, оно будет автоматически переименовано в <appname>.exe.config и этот файл должен быть доставлен вместе с вашим приложением.

Вы можете использовать один и тот же метод для вызова значений app settings из обоих файлов конфигурации:

System.Configuration.ConfigurationSettings.AppSettings["Key"]
+7
16 дек. '11 в 7:33
источник

Как я нашел лучший подход для доступа к переменным параметрам приложения системным образом, создав класс-оболочку над System.Configuration, как показано ниже

public class BaseConfiguration
    {
        protected static object GetAppSetting(Type expectedType, string key)
        {
            string value = ConfigurationManager.AppSettings.Get(key);
            try
            {
                if (expectedType == typeof(int))
                    return int.Parse(value);
                if (expectedType == typeof(string))
                    return value;

                throw new Exception("Type not supported.");
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Config key:{0} was expected to be of type {1} but was not.",
                    key, expectedType), ex);
            }
        }
    }

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

public class ConfigurationSettings:BaseConfiguration
    {
        #region App setting

        public static string ApplicationName
        {
            get { return (string)GetAppSetting(typeof(string), "ApplicationName"); }
        }

        public static string MailBccAddress
        {
            get { return (string)GetAppSetting(typeof(string), "MailBccAddress"); }
        }

        public static string DefaultConnection
        {
            get { return (string)GetAppSetting(typeof(string), "DefaultConnection"); }
        }

        #endregion App setting

        #region global setting



        #endregion global setting
    }
+5
14 окт. '16 в 6:33
источник

Я настоятельно рекомендую вам создать Wrapper для этого вызова. Что-то вроде ConfigurationReaderService и используйте инъекцию зависимости, чтобы получить этот класс. Таким образом вы сможете изолировать эти файлы конфигурации для целей тестирования.

Поэтому используйте предложенный ConfigurationManager.AppSettings["something"]; и верните это значение. Вы можете с помощью этого метода создать какой-то возврат по умолчанию, если в файле .config нет ключа.

+4
18 окт. '12 в 19:19
источник

Кроме того, вы можете использовать formo:

Конфигурация:

<appSettings>
    <add key="RetryAttempts" value="5" />
    <add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>

код:

dynamic config = new Configuration();
var retryAttempts1 = config.RetryAttempts;                 // returns 5 as a string
var retryAttempts2 = config.RetryAttempts(10);             // returns 5 if found in config, else 10
var retryAttempts3 = config.RetryAttempts(userInput, 10);  // returns 5 if it exists in config, else userInput if not null, else 10
var appBuildDate = config.ApplicationBuildDate<DateTime>();
+4
18 мая '15 в 20:58
источник

Просто для полноты, есть еще один вариант, доступный только для веб-проектов:

System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]

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

+3
16 мар. '16 в 11:59
источник

Шаг 1: Щелкните правой кнопкой мыши на вкладке ссылок, чтобы добавить ссылку.

Шаг 2: Нажмите на вкладку Сборки

Шаг 3: Поиск "System.Configuration"

Шаг 4: Нажмите ОК.

Тогда будет работать

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
+2
04 янв. '19 в 6:11
источник

Я всегда создаю интерфейс IConfig со свойствами typeafe, объявленными для всех значений конфигурации. Затем класс реализации Config завершает вызовы System.Configuration. Все ваши вызовы System.Configuration теперь в одном месте намного проще и чище, чтобы поддерживать и отслеживать, какие поля используются, и объявлять их значения по умолчанию. Я пишу набор частных вспомогательных методов для чтения и анализа общих типов данных.

Используя структуру IoC, вы можете получить доступ к полям IConfig в любом месте вашего приложения, просто передав интерфейс конструктору класса. Затем вы можете создавать макетные реализации интерфейса IConfig в своих модульных тестах, чтобы теперь вы могли тестировать различные значения конфигурации и комбинации значений без необходимости касаться файлов App.config или Web.config.

+2
10 янв. '16 в 23:29
источник

Вы можете использовать ниже линии, в моем случае это работало:

System.Configuration.ConfigurationSettings.AppSettings["yourKeyName"]

Вы должны позаботиться о том, чтобы вышеприведенная строка кода также была старой версией и не рекомендуется в новых библиотеках.

+1
29 мар. '19 в 11:12
источник

ConfigurationManager - это не то, что вам нужно для доступа к вашим собственным настройкам.

Для этого вы должны использовать

{YourAppName}.Properties.Settings.{settingName}

+1
19 июл. '19 в 13:55
источник

Я пытаюсь найти исправление для этой же проблемы в течение пары дней. Я смог разрешить это, добавив ключ в тег appsettings в файле web.config. Это должно переопределить .dll при использовании помощника.

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
+1
30 апр. '13 в 18:06
источник

Другое возможное решение:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
+1
30 мар. '16 в 14:34
источник

Пожалуйста, проверьте .NET версию, которую вы работаете. Должно быть больше 4. И вы должны добавить системную библиотеку System.Configuration в ваше приложение.

+1
23 сент. '18 в 4:46
источник

вот пример: App.config

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer
-4
09 янв. '17 в 22:57
источник

Посмотрите другие вопросы по меткам или Задайте вопрос