Odczyt ustawień z aplikacji.config lub web.config in.net

Pracuję nad biblioteką klas C#, która musi być w stanie odczytać ustawienia z pliku web.config lub app.config (w zależności od tego, czy DLL jest odwołany z ASP.NET aplikacji webowej lub aplikacji Windows Forms).

I ' ve found that

ConfigurationSettings.AppSettings.Get("MySetting")

Działa, ale ten kod został oznaczony przez Microsoft jako przestarzały.

Przeczytałem, że powinienem używać:

ConfigurationManager.AppSettings["MySetting"]

Jednak System.Configuration.ConfigurationManager klasa nie wydaje się być dostępna z projektu biblioteki klas C#.

Robi czy ktoś wie, jak najlepiej to zrobić?

Author: Shamim Hafiz, 2009-07-27

20 answers

Musisz Dodać referencję do System.Configuration w folderze referencje twojego projektu.

Zdecydowanie powinieneś używać ConfigurationManager zamiast przestarzałego ConfigurationSettings.

 667
Author: womp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-02 18:25:08

Dla Przykładowej Aplikacji.config jak poniżej:

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

Możesz przeczytać powyższe ustawienia aplikacji za pomocą kodu pokazanego poniżej:

using System.Configuration;

Może być również konieczne dodanie odniesienia do systemu.Konfiguracja w projekcie, jeśli jeszcze go nie ma. Następnie możesz uzyskać dostęp do wartości w następujący sposób:

string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];
Mam nadzieję, że to pomoże!
 696
Author: Rama,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-27 09:18:50

Aktualizacja dla frameworka 4.5 i 4.6; następujące elementy nie będą już działać:

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

Teraz uzyskaj dostęp do klasy ustawień poprzez Właściwości:

string keyvalue= Properties.Settings.Default.keyname;

Zobacz Zarządzanie ustawieniami aplikacji aby uzyskać więcej informacji.

 56
Author: bsivel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-09 17:51:08

Kliknij prawym przyciskiem myszy na swojej bibliotece klas i wybierz z Menu opcję "Dodaj referencje", a na koniec z zakładki. NET wybierz System.Konfiguracja. Obejmowałoby to System.Konfiguracja dll w projekcie.

 35
Author: Shiva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-27 17:51:10

Używam tego i działa dobrze dla mnie

textBox1.Text = ConfigurationManager.AppSettings["Name"];
 28
Author: Pagey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 23:24:05

Musisz dodać do projektu odniesienie do systemu.Montaż konfiguracji.

 20
Author: Otávio Décio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 08:56:47

Możesz dodawać aplikację.plik konfiguracyjny do biblioteki DLL. App.Config działa tylko dla projektów wykonywalnych, ponieważ wszystkie biblioteki dll pobierają konfigurację z pliku konfiguracyjnego dla wykonywanego exe.

Załóżmy, że masz dwa projekty w swoim rozwiązaniu:

  • SomeDll
  • SomeExe

Twój problem może być spowodowany faktem, że dołączasz aplikację.config to SomeDLL a nie SomeExe. SomeDll jest w stanie odczytać konfigurację z SomeExe projekt.

 14
Author: Victor Naranjo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-12 18:59:47

Odczyt Z Config:

Musisz dodać odniesienie do Config

  1. Otwórz "właściwości" w swoim projekcie
  2. przejdź do zakładki "Ustawienia"
  3. Dodaj "Nazwa" i "wartość"
  4. Uzyskaj wartość za pomocą następującego kodu:

    String value = Properties.Ustawienia.Default.keyname;

Zapisz do Config:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
 14
Author: Masoud Siahkali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-07 12:29:46

Miałem ten sam problem, po prostu przeczytaj je w ten sposób:

System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
 7
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-03 09:39:29

Spróbuj tego:

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

W sieci.config powinien być następną strukturą:

<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
 7
Author: Ruslan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-16 06:12:56

web.config jest używany z aplikacjami webowymi.web.config domyślnie posiada kilka konfiguracji wymaganych dla aplikacji webowej. Możesz mieć web.config dla każdego folderu w aplikacji internetowej.

app.config jest używany w aplikacjach windows. Podczas budowania aplikacji w vs.net, zostanie automatycznie przemianowany na <appname>.exe.config i ten plik musi zostać dostarczony wraz z Twoją aplikacją.

Możesz użyć tej samej metody do wywołania wartości app settings z obu plików konfiguracyjnych:

System.Configuration.ConfigurationSettings.AppSettings["Key"]
 5
Author: Wavare Santosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-28 09:31:35

Zdecydowanie zalecam stworzenie wrappera dla tego połączenia. Coś w rodzaju ConfigurationReaderService i użyj dependency injection, aby uzyskać tę klasę. W ten sposób będziesz mógł wyizolować te pliki konfiguracyjne do celów testowych.

Więc użyj ConfigurationManager.AppSettings["something"]; sugerowanej i zwróć tę wartość. Możesz za pomocą tej metody utworzyć jakiś domyślny zwrot, jeśli nie ma dostępnego klucza .plik konfiguracyjny.

 3
Author: Custodio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-18 19:19:11

Jak znalazłem najlepsze podejście do dostępu do zmiennych ustawień aplikacji w sposób systematyczny, tworząc klasę wrapper nad systemem.Konfiguracja jak poniżej

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

Teraz możemy uzyskać dostęp do potrzebnych zmiennych ustawień za pomocą zakodowanych nazw za pomocą innej klasy jak poniżej

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
    }
 3
Author: Ashwini Jindal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 06:33:11

Możesz również użyć formo :

Config:

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

Kod:

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>();
 2
Author: pomber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 20:58:46

Od kilku dni próbuję znaleźć rozwiązanie tego samego problemu. Udało mi się to rozwiązać, dodając klucz w tagu appsettings w Internecie.config. To powinno zastąpić .dll podczas korzystania z helpera.

<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
 0
Author: Jason,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-30 18:06:46

Zawsze tworzę interfejs IConfig z właściwościami typesafe zadeklarowanymi dla wszystkich wartości konfiguracyjnych. Klasa implementacji Config następnie owija wywołania do systemu.Konfiguracja. Cały Twój System.Wywołania konfiguracyjne są teraz w jednym miejscu o wiele łatwiejsze i czystsze w utrzymaniu i śledzeniu, które pola są używane i deklarowaniu ich wartości domyślnych. Piszę zestaw prywatnych metod pomocniczych do odczytu i analizy typowych danych.

Używając frameworka IoC możesz uzyskać dostęp do IConfig pola w dowolnym miejscu w aplikacji, po prostu przekazując interfejs do konstruktora klasy. Możesz także tworzyć przykładowe implementacje interfejsu IConfig w testach jednostkowych, dzięki czemu możesz teraz testować różne wartości konfiguracyjne i kombinacje wartości bez potrzeby dotykania aplikacji.config lub Web.plik konfiguracyjny.

 0
Author: Tony O'Hagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-10 23:29:07

Tylko dla kompletności, jest jeszcze jedna opcja dostępna tylko dla projektów internetowych:

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

Zaletą tego jest to, że nie wymaga dodatkowego odniesienia do dodania, więc może być lepsze dla niektórych osób.

 0
Author: rdans,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-16 11:59:27

Inne możliwe rozwiązanie:

var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
 0
Author: sherite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-30 15:15:19

Pls sprawdzić wersję. NET pracujesz. Powinna być wyższa niż 4. I trzeba dodać System.Konfiguracja biblioteki systemowej do Twojej aplikacji

 0
Author: nayanajith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 04:46:40

Dla ex:

<applicationSettings>
        <MyApp.My.MySettings>
            <setting name="Printer" serializeAs="String">
                <value>1234 </value>
            </setting>
        </MyApp.My.MySettings>
    </applicationSettings>
Dim strPrinterName as string= My.settings.Printer
 -2
Author: JMat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 23:23:55