Чтение параметров из app.config или web.config в .NET

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

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

ConfigurationSettings.AppSettings.Get("MySetting")

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

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

ConfigurationManager.AppSettings["MySetting"]

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

Каков наилучший способ сделать это?

Комментарии к вопросу (3)

Для Образца Приложение.конфигурации, как показано ниже:

<?xml version="1.0" encoding="utf-8" ?>





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

using System.Configuration;

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

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

Надеюсь, что это помогает!

Комментарии (9)
Решение

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

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

Комментарии (1)

Обновления для Framework 4.5 и 4.6; следующее не будет работать:

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

Теперь доступ к параметрам класса через свойства:

string keyvalue= Properties.Settings.Default.keyname;

См. [Настройки Приложения](https://msdn.microsoft.com/en-us/library/a65txexh(в=против 120).aspx) для получения дополнительной информации.

Комментарии (5)

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

Комментарии (1)

Я'м через это, и это работает хорошо для меня:

textBox1.Text = ConfigurationManager.AppSettings["Name"];
Комментарии (1)

Читать Из Конфига :

Вы'll необходимо добавить ссылку на конфиг

  1. Открыть "и" на ваш проект свойства
  2. Идти, чтобы &quot вкладку;Настройки" и
  3. Добавить "имя" и "ценности"и
  4. Получить значение с помощью следующего кода :

строковое значение = "свойства".Параметры.По умолчанию.имя_параметра;

Сохранить в конфиг :

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
Комментарии (1)

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

Комментарии (0)

Вы могли бы добавить приложение.конфигурационный файл для библиотеки DLL. Приложение.Config работает только для исполняемых проектов, так как все ДЛЛ взять настройки из конфигурационного файла для EXE-файл выполняется.

Позвольте'ы сказать, у вас есть два проекта решения:

  • SomeDll
  • SomeExe

Ваша проблема может быть связанным с тем, что вы'вновь включая приложения.config для SomeDLL и не SomeExe. SomeDll умеет читать настройки из проекта SomeExe.

Комментарии (2)

Попробуйте это:

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

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





Комментарии (1)

У меня была такая же проблема, просто читать их таким образом:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
Комментарии (2)

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

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

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

System.Configuration.ConfigurationSettings.AppSettings["Key"]
Комментарии (1)

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

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
    }
Комментарии (1)

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

Конфиг:




Код:

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();
Комментарии (1)

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

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

Комментарии (1)

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

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

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

Комментарии (0)

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

С помощью системы МОК вы можете получить доступ к IConfig поля в любом месте в приложении, просто проходя интерфейс конструктора класса. Вы're также может создать макет реализации интерфейса IConfig в ваш юнит-тесты, так что теперь вы можете проверить различные значения конфигурации и комбинации значений без необходимости прикасаться к вашему приложению.config или web.файл config.

Комментарии (0)

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

Шаг 2: нажать на вкладку сборки

Шаг 3: поиск 'системы.Конфигурация'

Шаг 4: Нажмите кнопку ОК.

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

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
Комментарии (0)

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






Комментарии (0)

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

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

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

Комментарии (0)

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

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
Комментарии (0)