connectionstrings - configurationsettings.appsettings c#
ConfiguraciĆ³n de lectura desde app.config o web.config en.net (20)
Actualización para el framework 4.5 y 4.6; Lo siguiente ya no funcionará:
string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];
Ahora accede a la clase de Configuración a través de Propiedades:
string keyvalue= Properties.Settings.Default.keyname;
Consulte Administración de la configuración de la aplicación para obtener más información.
Estoy trabajando en una biblioteca de clase C # que debe poder leer la configuración del web.config
o app.config
(dependiendo de si se hace referencia a la DLL desde una aplicación web ASP.NET o una aplicación de Windows Forms).
He encontrado que
ConfigurationSettings.AppSettings.Get("MySetting")
Funciona, pero ese código ha sido marcado como obsoleto por Microsoft.
He leído que debería estar usando:
ConfigurationManager.AppSettings["MySetting"]
Sin embargo, la clase System.Configuration.ConfigurationManager
no parece estar disponible en un proyecto de biblioteca de clases de C #.
¿Alguien sabe cuál es la mejor manera de hacer esto?
Además, puedes usar formo :
Config:
<appSettings>
<add key="RetryAttempts" value="5" />
<add key="ApplicationBuildDate" value="11/4/1999 6:23 AM" />
</appSettings>
Código:
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>();
Como encontré el mejor enfoque para acceder a las variables de configuración de la aplicación de forma sistemática, forme una clase de envoltura sobre System.Configuration como se muestra a continuación
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);
}
}
}
Ahora podemos acceder a las variables de configuración necesarias mediante nombres codificados utilizando otra clase como se muestra a continuación
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
}
Debe agregar al proyecto una referencia al conjunto System.Configuration.
Deberá agregar una referencia a System.Configuration
en la carpeta de referencias de su proyecto.
Definitivamente, debería estar utilizando el ConfigurationManager
sobre los ConfigurationSettings
obsoletos.
Es posible que esté agregando el archivo App.config a una DLL. App.Config funciona solo para proyectos ejecutables, ya que todos los dll toman la configuración del archivo de configuración para el archivo ejecutable.
Digamos que tienes dos proyectos en tu solución:
- AlgunosDll
- Algunos exe
Su problema podría estar relacionado con el hecho de que está incluyendo app.config a SomeDLL y no a SomeExe. SomeDll puede leer la configuración del proyecto SomeExe.
Estoy usando esto y me funciona bien
textBox1.Text = ConfigurationManager.AppSettings["Name"];
Haga clic con el botón derecho en la biblioteca de su clase y elija la opción "Agregar referencias" en el Menú; y finalmente desde la pestaña .NET, seleccione Configuración de Sistema. Esto incluiría dll System.Configuration en su proyecto.
He estado tratando de encontrar una solución para este mismo problema durante un par de días. Pude resolver esto agregando una clave dentro de la etiqueta appsettings en web.config. Esto debería anular el .dll al usar el ayudante.
<configuration>
<appSettings>
<add key="loginUrl" value="~/RedirectValue.cshtml" />
<add key="autoFormsAuthentication" value="false"/>
</appSettings>
</configuration>
Leer de Config:
Necesitarás agregar una referencia a Config.
- Abra "Propiedades" en su proyecto
- Ir a la pestaña "Configuración"
- Añadir "Nombre" y "Valor"
Obtener valor con el uso de código siguiente:
string value = Properties.Settings.Default.keyname;
Guardar en Config:
Properties.Settings.Default.keyName = value;
Properties.Settings.Default.Save();
Otra posible solución:
var MyReader = new System.Configuration.AppSettingsReader();
string keyvalue = MyReader.GetValue("keyalue",typeof(string)).ToString();
Para muestra App.config como abajo:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="countoffiles" value="7" />
<add key="logfilelocation" value="abc.txt" />
</appSettings>
</configuration>
Lee la configuración de la aplicación anterior utilizando el código que se muestra a continuación:
using System.Configuration;
Es posible que también deba agregar una referencia a System.Configuration en su proyecto si aún no existe. A continuación, puede acceder a los valores de esta manera:
string configvalue1 = ConfigurationManager.AppSettings["countoffiles"];
string configvalue2 = ConfigurationManager.AppSettings["logfilelocation"];
¡Espero que esto ayude!
Por favor, compruebe la versión .net que está trabajando. Debería ser superior a 4. Y debe agregar la biblioteca del sistema System.Configuration a su aplicación
Prueba esto:
string keyvalue=System.Configuration.ConfigurationManager.AppSettings["keyname"];
En web.config debería ser la siguiente estructura:
<configuration>
<appSettings>
<add key="keyname" value="keyvalue" />
</appSettings>
</configuration>
Siempre creo una interfaz IConfig con propiedades de tipos seguros declaradas para todos los valores de configuración. Una clase de implementación Config envuelve las llamadas a System.Configuration. Todas sus llamadas de Configuración del sistema ahora están en un lugar mucho más fácil y más limpio para mantener y rastrear qué campos se están utilizando y declarar sus valores predeterminados. Escribo un conjunto de métodos de ayuda privada para leer y analizar tipos de datos comunes.
Usando un marco de IoC, puede acceder a los campos de IConfig en cualquier lugar de su aplicación simplemente pasando la interfaz a un constructor de clases. También puede crear implementaciones simuladas de la interfaz IConfig en sus pruebas unitarias, de modo que ahora puede probar varios valores de configuración y combinaciones de valores sin necesidad de tocar su archivo App.config o Web.config.
Solo para completar, hay otra opción disponible solo para proyectos web:
System.Web.Configuration.WebConfigurationManager.AppSettings["MySetting"]
El beneficio de esto es que no requiere que se agregue una referencia adicional, por lo que puede ser preferible para algunas personas.
Te recomiendo que crees un Wrapper para esta llamada. Algo así como un ConfigurationReaderService
y el uso de inyección de dependencia para obtener esta clase. De esta manera, podrá aislar estos archivos de configuración para realizar pruebas.
Entonces use el ConfigurationManager.AppSettings["something"];
Sugiere y devuelve este valor. Con este método puede crear algún tipo de retorno predeterminado si no hay una clave disponible en el archivo .config.
Tuve el mismo problema, solo léelos de esta manera:
System.Configuration.ConfigurationSettings.AppSettings["MySetting"]
por ej.
<applicationSettings>
<MyApp.My.MySettings>
<setting name="Printer" serializeAs="String">
<value>1234 </value>
</setting>
</MyApp.My.MySettings>
</applicationSettings>
Dim strPrinterName as string= My.settings.Printer
web.config
se utiliza con aplicaciones web. web.config
por defecto tiene varias configuraciones requeridas para la aplicación web. Puede tener un web.config
para cada carpeta en su aplicación web.
app.config
se utiliza para aplicaciones de Windows. Cuando compile la aplicación en vs.net, se cambiará automáticamente su nombre a <appname>.exe.config
y este archivo se entregará junto con su aplicación.
Puede usar el mismo método para llamar a los valores de app settings
la app settings
desde ambos archivos de configuración:
System.Configuration.ConfigurationSettings.AppSettings["Key"]