Чтение настроек из приложения.config или web.config in.net



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



я нашел это



ConfigurationSettings.AppSettings.Get("MySetting")


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



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



ConfigurationManager.AppSettings["MySetting"]


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



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

792   20  

20 ответов:

вам потребуется добавить ссылку до System.Configuration в вашем проекте папку ссылки.

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

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

<?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;

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

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

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

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

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

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

string keyvalue= Properties.Settings.Default.keyname;

посмотреть Управление Настройки Приложения для получения дополнительной информации.

щелкните правой кнопкой мыши на библиотеке классов и выберите в меню опцию "Добавить ссылки"; и, наконец, на вкладке .NET выберите System.Конфигурация. Это будет включать в себя систему.Конфигурация dll в вашем проекте.

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

textBox1.Text = ConfigurationManager.AppSettings["Name"];

вы должны добавить в проект ссылку на сборку System.Сборка конфигурации.

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

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

  • SomeDll
  • некоторые из них

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

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

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

  1. откройте "Свойства" в вашем проекте
  2. перейдите на вкладку "Параметры"
  3. добавить "имя" и "значение"
  4. получить значение с помощью следующего кода :

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

сохранить в Config:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();

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

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

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

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

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

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>

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

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

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

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

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

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

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

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
    }

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

Config:

<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>();

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

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>

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

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

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

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

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

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

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();

пожалуйста, проверьте версию .net вы работаете. Она должна быть выше 4. И вы должны добавить систему.Конфигурация системной библиотеки для вашего приложения

например:

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer

Comments

    Ничего не найдено.