web-dev-qa-db-fra.com

Lecture des paramètres depuis app.config ou web.config dans .net

Je travaille sur une bibliothèque de classe C # qui doit pouvoir lire les paramètres du fichier web.config ou app.config (selon que le DLL est référencé depuis un fichier ASP.NET. application Web ou une application Windows Forms).

J'ai trouvé ça

ConfigurationSettings.AppSettings.Get("MySetting")

fonctionne, mais ce code a été marqué comme obsolète par Microsoft.

J'ai lu que je devrais utiliser:

ConfigurationManager.AppSettings["MySetting"]

Toutefois, la classe System.Configuration.ConfigurationManager ne semble pas être disponible à partir d'un projet de bibliothèque de classes C #.

Est-ce que quelqu'un sait quelle est la meilleure façon de faire cela?

738
Russ Clark

Vous aurez besoin de ajouter une référence à System.Configuration dans votre projet dossier de références.

Vous devriez certainement utiliser le ConfigurationManager sur le ConfigurationSettings obsolète.

751
womp

Pour Sample App.config comme ci-dessous:

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

Vous lisez les paramètres de l'application ci-dessus à l'aide du code ci-dessous:

using System.Configuration;

Vous devrez peut-être également ajouter une référence à System.Configuration dans votre projet s'il n'en existe pas déjà. Vous pouvez ensuite accéder aux valeurs comme suit:

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

J'espère que cela t'aides!

803
Ram

Mise à jour pour les frameworks 4.5 et 4.6; les éléments suivants ne fonctionneront plus:

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

Accédez maintenant à la classe Setting via Properties:

string keyvalue= Properties.Settings.Default.keyname;

Voir Gestion des paramètres de l'application pour plus d'informations.

72
bsivel

Cliquez avec le bouton droit sur la bibliothèque de votre classe et choisissez l’option "Ajouter des références" dans le menu. et enfin sous l'onglet .NET, sélectionnez System.Configuration. Cela inclurait System.Configuration dll dans votre projet.

36
Shiva

J'utilise ceci et ça marche bien pour moi

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

Lire à partir de la configuration:

Vous devrez ajouter une référence à Config.

  1. Ouvrez "Propriétés" sur votre projet
  2. Allez dans l'onglet "Paramètres"
  3. Ajouter "Nom" et "Valeur"
  4. Obtenir une valeur en utilisant le code suivant:

    valeur de chaîne = Properties.Settings.Default.keyname;

Enregistrer dans la configuration:

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

Vous devez ajouter au projet une référence à l'Assemblée System.Configuration.

21
Otávio Décio

Vous pouvez ajouter le fichier App.config à une DLL. App.Config ne fonctionne que pour les projets exécutables, car toutes les dll prennent la configuration du fichier de configuration pour le fichier exe en cours d'exécution.

Disons que vous avez deux projets dans votre solution:

  • Un peu
  • SomeExe

Votre problème peut être lié au fait que vous incluez le fichier app.config à SomeDLL et non à SomeExe. SomeDll est capable de lire la configuration à partir du projet SomeExe.

17
Victor Naranjo

Essaye ça:

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

Dans web.config devrait être la structure suivante:

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

J'ai eu le même problème, lisez-les simplement de cette façon:

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

web.config est utilisé avec les applications Web .web.config comporte par défaut plusieurs configurations requises pour l'application Web. Vous pouvez avoir un web.config pour chaque dossier de votre application Web.

app.config est utilisé pour les applications Windows. Lorsque vous générez l'application au format vs.net, elle sera automatiquement renommée <appname>.exe.config et ce fichier devra être livré avec votre application.

Vous pouvez utiliser la même méthode pour appeler les valeurs app settings à partir des deux fichiers de configuration:

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

Comme j'ai trouvé la meilleure approche pour accéder aux variables de paramètres d'application de manière systématique en faisant une classe wrapper sur System.Configuration comme ci-dessous

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

Maintenant, nous pouvons accéder aux variables de paramètres nécessaires par des noms codés en dur en utilisant une autre classe comme ci-dessous

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

En outre, vous pouvez utiliser formo :

Config:

<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

Je vous recommande fortement de créer un wrapper pour cet appel. Quelque chose comme un ConfigurationReaderService et utilisez l'injection de dépendance pour obtenir cette classe. De cette façon, vous pourrez isoler ces fichiers de configuration à des fins de test.

Utilisez donc le ConfigurationManager.AppSettings["something"]; suggéré et renvoyez cette valeur. Avec cette méthode, vous pouvez créer une sorte de retour par défaut si aucune clé n'est disponible dans le fichier .config.

4
Custodio

Juste pour être complet, une autre option est disponible pour les projets Web uniquement:

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

L'avantage de ceci est qu'il ne nécessite pas l'ajout d'une référence supplémentaire, ce qui peut être préférable pour certaines personnes.

3
rdans

Étape 1: Cliquez avec le bouton droit sur l’onglet Références pour ajouter une référence.

Étape 2: Cliquez sur l'onglet Assemblies

Étape 3: Recherchez 'System.Configuration'

Étape 4: Cliquez sur OK.

Alors ça va marcher

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

Je crée toujours une interface IConfig avec des propriétés typesafe déclarées pour toutes les valeurs de configuration. Une classe d'implémentation de configuration encapsule ensuite les appels dans System.Configuration. Tous vos appels System.Configuration sont maintenant réunis au même endroit, ce qui facilite grandement la maintenance et le suivi des champs utilisés, ainsi que la déclaration de leurs valeurs par défaut. J'écris un ensemble de méthodes d'assistance privées pour lire et analyser les types de données courants.

En utilisant un framework IoC, vous pouvez accéder aux champs IConfig où que vous soyez dans l'application en passant simplement l'interface à un constructeur de classe. Vous pouvez également créer des implémentations factices de l'interface IConfig dans vos tests unitaires afin de pouvoir maintenant tester diverses valeurs de configuration et combinaisons de valeurs sans avoir à toucher votre fichier App.config ou Web.config.

2
Tony O'Hagan

J'essaie de trouver une solution à ce problème depuis quelques jours maintenant. J'ai pu résoudre ce problème en ajoutant une clé dans la balise appsettings du fichier web.config. Cela devrait remplacer le fichier .dll lors de l'utilisation de l'aide.

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

vous pouvez utiliser la ligne ci-dessous, dans mon cas cela fonctionnait:

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

vous devez vous assurer que la ligne de code ci-dessus est également une ancienne version et qu'elle est obsolète dans les nouvelles bibliothèques.

1
Mohammad D

Le ConfigurationManager n'est pas ce dont vous avez besoin pour accéder à vos propres paramètres

Pour ce faire, vous devez utiliser le

{YourAppName}.Properties.Settings.{settingName}

1
martin c

Une autre solution possible:

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

J'ai pu utiliser l'approche ci-dessous en travaillant pour des projets .netcore:

Pas :

i) Créez un fichier appsettings.json (format indiqué ci-dessous) dans votre projet. ii) Créez ensuite une classe de configuration, au format fourni ci-dessous. iii) J'ai créé une méthode Login () pour montrer l'utilisation de la classe de configuration.

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($@"Environments:{env}");
        }

    }
`


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

Veuillez vérifier la version .net que vous travaillez. Il doit être supérieur à 4. Et vous devez ajouter la bibliothèque système System.Configuration à votre application.

0
nayanajith