it-swarm.com.de

Einstellungen aus app.config oder web.config in .net lesen

Ich arbeite an einer C # -Klassenbibliothek, die in der Lage sein muss, Einstellungen aus der Datei web.config oder app.config zu lesen (abhängig davon, ob von einem ASP.NET auf DLL verwiesen wird) Webanwendung oder eine Windows Forms-Anwendung).

Ich habe das gefunden

ConfigurationSettings.AppSettings.Get("MySetting")

funktioniert, aber dieser Code wurde von Microsoft als veraltet markiert.

Ich habe gelesen, dass ich verwenden sollte:

ConfigurationManager.AppSettings["MySetting"]

Die Klasse System.Configuration.ConfigurationManager scheint jedoch in einem C # -Klassenbibliotheksprojekt nicht verfügbar zu sein.

Weiß jemand, was der beste Weg ist, dies zu tun?

738
Russ Clark

Sie müssen einen Verweis auf System.Configuration im Verweisordner Ihres Projekts hinzufügen.

Sie sollten auf jeden Fall das ConfigurationManager über dem veralteten ConfigurationSettings verwenden.

751
womp

Für die Beispiel-App.config wie folgt:

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

Sie lesen die obigen App-Einstellungen mit dem folgenden Code:

using System.Configuration;

Möglicherweise müssen Sie Ihrem Projekt auch einen Verweis auf System.Configuration hinzufügen, falls noch keiner vorhanden ist. Sie können dann wie folgt auf die Werte zugreifen:

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

Hoffe das hilft!

803
Ram

Update für Framework 4.5 und 4.6; Folgendes funktioniert nicht mehr:

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

Greifen Sie nun über Eigenschaften auf die Setting-Klasse zu:

string keyvalue= Properties.Settings.Default.keyname;

Weitere Informationen finden Sie unter Verwalten der Anwendungseinstellungen .

72
bsivel

Klicken Sie mit der rechten Maustaste auf Ihre Klassenbibliothek und wählen Sie im Menü die Option "Verweise hinzufügen". Wählen Sie schließlich auf der Registerkarte .NET die Option System.Configuration aus. Dies würde die System.Configuration-DLL in Ihr Projekt aufnehmen.

36
Shiva

Ich benutze das und es funktioniert gut für mich

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

Aus Konfiguration lesen:

Sie müssen einen Verweis auf Config hinzufügen

  1. Öffnen Sie in Ihrem Projekt "Eigenschaften"
  2. Gehen Sie zur Registerkarte "Einstellungen"
  3. "Name" und "Wert" hinzufügen
  4. Holen Sie sich den Wert mit folgendem Code:

    string value = Properties.Settings.Default.keyname;

In Konfiguration speichern:

   Properties.Settings.Default.keyName = value;
   Properties.Settings.Default.Save();
22
Masoud Siahkali

Sie müssen dem Projekt einen Verweis auf die System.Configuration-Assembly hinzufügen.

21
Otávio Décio

Möglicherweise fügen Sie die Datei App.config einer DLL hinzu. App.Config funktioniert nur für ausführbare Projekte, da alle DLLs die Konfiguration aus der Konfigurationsdatei für die auszuführende Exe übernehmen.

Nehmen wir an, Sie haben zwei Projekte in Ihrer Lösung:

  • SomeDll
  • SomeExe

Ihr Problem besteht möglicherweise darin, dass Sie die app.config in SomeDLL und nicht in SomeExe einfügen. SomeDll kann die Konfiguration aus dem SomeExe-Projekt lesen.

17
Victor Naranjo

Versuche dies:

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

In der web.config sollte folgende Struktur sein:

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

Ich hatte das gleiche Problem, lies sie einfach so:

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

web.config wird mit Webanwendungen verwendet. web.config weist standardmäßig verschiedene Konfigurationen auf, die für die Webanwendung erforderlich sind. Sie können für jeden Ordner in Ihrer Webanwendung einen web.config festlegen.

app.config wird für Windows-Anwendungen verwendet. Wenn Sie die Anwendung in vs.net erstellen, wird sie automatisch in <appname>.exe.config umbenannt und diese Datei muss zusammen mit Ihrer Anwendung geliefert werden.

Mit derselben Methode können Sie die app settings -Werte aus beiden Konfigurationsdateien aufrufen:

System.Configuration.ConfigurationSettings.AppSettings["Key"]
7
Wavare Santosh

Wie ich am besten gefunden habe, um systematisch auf App-Einstellungsvariablen zuzugreifen, indem eine Wrapper-Klasse über System.Configuration erstellt wurde (siehe unten)

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

Jetzt können wir mit einer anderen Klasse wie unten auf die erforderlichen Einstellungsvariablen durch fest codierte Namen zugreifen

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
Ashwini Jindal

Sie können auch formo verwenden:

Konfig:

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

Code:

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
pomber

Ich empfehle Ihnen dringend, einen Wrapper für diesen Aufruf zu erstellen. So etwas wie ConfigurationReaderService und verwenden Sie die Abhängigkeitsinjektion, um diese Klasse abzurufen. Auf diese Weise können Sie diese Konfigurationsdateien zu Testzwecken isolieren.

Verwenden Sie also den ConfigurationManager.AppSettings["something"]; -Vorschlag und geben Sie diesen Wert zurück. Mit dieser Methode können Sie eine Art Standardrückgabe erstellen, wenn in der .config-Datei kein Schlüssel verfügbar ist.

4
Custodio

Der Vollständigkeit halber gibt es eine andere Option, die nur für Webprojekte verfügbar ist:

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

Dies hat den Vorteil, dass kein zusätzlicher Verweis hinzugefügt werden muss, was für einige Personen möglicherweise vorzuziehen ist.

3
rdans

Schritt 1: Klicken Sie mit der rechten Maustaste auf die Registerkarte Referenzen, um eine Referenz hinzuzufügen.

Schritt 2: Klicken Sie auf die Registerkarte Assemblies

Schritt 3: Suche nach 'System.Configuration'

Schritt 4: Klicken Sie auf OK.

Dann wird es funktionieren

 string value = System.Configuration.ConfigurationManager.AppSettings["keyname"];
2
Jitendra Suthar

Ich erstelle immer eine IConfig-Schnittstelle mit typsicheren Eigenschaften, die für alle Konfigurationswerte deklariert sind. Eine Config-Implementierungsklasse verpackt dann die Aufrufe von System.Configuration. Alle Ihre System.Configuration-Aufrufe befinden sich jetzt an einem Ort und sind so viel einfacher und übersichtlicher zu verwalten, zu verfolgen, welche Felder verwendet werden, und ihre Standardwerte zu deklarieren. Ich schreibe eine Reihe von privaten Hilfsmethoden, um gängige Datentypen zu lesen und zu analysieren.

Mit einem IoC-Framework können Sie überall in Ihrer App auf die IConfig-Felder zugreifen, indem Sie die Schnittstelle einfach an einen Klassenkonstruktor übergeben. Sie können dann in Ihren Unit-Tests auch Scheinimplementierungen der IConfig-Schnittstelle erstellen, sodass Sie jetzt verschiedene Konfigurationswerte und Wertekombinationen testen können, ohne Ihre App.config- oder Web.config-Datei berühren zu müssen.

2
Tony O'Hagan

Ich habe seit ein paar Tagen versucht, eine Lösung für dieses Problem zu finden. Ich konnte dies beheben, indem ich einen Schlüssel in das appsettings-Tag in der web.config einfügte. Dies sollte die .dll überschreiben, wenn der Helfer verwendet wird.

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

sie können unter Zeile verwenden, in meinem Fall hat es funktioniert:

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

sie müssen darauf achten, dass es sich bei der obigen Codezeile ebenfalls um eine alte Version handelt und diese in neuen Bibliotheken veraltet ist.

1
Mohammad D

Der ConfigurationManager ist nicht das, was Sie benötigen, um auf Ihre eigenen Einstellungen zuzugreifen

Verwenden Sie dazu das

{YourAppName}.Properties.Settings.{settingName}

1
martin c

Eine andere mögliche Lösung:

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

Ich war in der Lage, für .netcore-Projekte wie folgt vorzugehen:

Schritte :

i) Erstellen Sie in Ihrem Projekt eine appsettings.json (unten angegebenes Format) ii) Erstellen Sie als Nächstes eine Konfigurationsklasse im unten angegebenen Format. iii) Ich habe eine Login () -Methode erstellt, um die Verwendung der Konfigurationsklasse anzuzeigen.

Create appsettings.json in your project with content :
`
{
  "Environments": {
    "QA": {
      "Url": "somevalue",
 "Username": "someuser",
      "Password": "somepwd"
  },
  "BrowserConfig": {
    "Browser": "Chrome",
    "Headless": "true"
  },
  "EnvironmentSelected": {
    "Environment": "QA" 
  }
}
`


`
 public static class Configuration
    {
        private static IConfiguration _configuration;

        static Configuration()
        {
            var builder = new ConfigurationBuilder()
                .AddJsonFile($"appsettings.json");

            _configuration = builder.Build();

        }
        public static Browser GetBrowser()
        {

            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Firefox")
            {
                return Browser.Firefox;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "Edge")
            {
                return Browser.Edge;
            }
            if (_configuration.GetSection("BrowserConfig:Browser").Value == "IE")
            {
                return Browser.InternetExplorer;
            }
            return Browser.Chrome;
        }

        public static bool IsHeadless()
        {
            return _configuration.GetSection("BrowserConfig:Headless").Value == "true";
        }

        public static string GetEnvironment()
        {
            return _configuration.GetSection("EnvironmentSelected")["Environment"];
        }
        public static IConfigurationSection EnvironmentInfo()
        {
            var env = GetEnvironment();
            return _configuration.GetSection([email protected]"Environments:{env}");
        }

    }
`


`
 public void Login()
        {
            var environment = Configuration.EnvironmentInfo();
            Email.SendKeys(environment["username"]);
            Password.SendKeys(environment["password"]);
            WaitForElementToBeClickableAndClick(_driver, SignIn);
        }
`
0
user3534040

Bitte überprüfen Sie die .net-Version, an der Sie arbeiten. Sie sollte höher als 4 sein. Außerdem müssen Sie Ihrer Anwendung die Systembibliothek System.Configuration hinzufügen

0
nayanajith