c# - Configuración de lectura desde app.config o web.config en .net



10 Answers

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!

c# .net appsettings

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?




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.




Debe agregar al proyecto una referencia al conjunto System.Configuration.




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.




Tuve el mismo problema, solo léelos de esta manera:

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



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.




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
    }



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>



Otra posible solución:

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



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



Related


Tags

c#   .net   appsettings