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?
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.
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!
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.
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.
J'utilise ceci et ça marche bien pour moi
textBox1.Text = ConfigurationManager.AppSettings["Name"];
Lire à partir de la configuration:
Vous devrez ajouter une référence à Config.
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();
Vous devez ajouter au projet une référence à l'Assemblée System.Configuration.
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:
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.
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>
J'ai eu le même problème, lisez-les simplement de cette façon:
System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
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"]
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
}
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>();
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.
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.
É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"];
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.
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>
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.
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}
Une autre solution possible:
var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
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);
}
`
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.