Los applicationSettings son de sólo lectura en tiempo de ejecución. Puede establecerlos/modificarlos directamente a través de un editor de texto en el archivo app.config, pero se recomienda abrir las propiedades del proyecto en Visual Studio y seleccionar la pestaña "Configuración". Es importante establecer el ámbito correcto:
- Si la configuración se aplica a toda la aplicación (para todos los usuarios), seleccione "Aplicación" como ámbito.
- Si cada usuario debe tener ajustes individuales (unido al perfil de usuario), a continuación, seleccione "Usuario"
Por ejemplo, si crea myOwnSetting en su proyecto WindowsFormsTestApplication1 de la siguiente manera:
se añadirá lo siguiente al archivo app.config de la aplicación:
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="WindowsFormsTestApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<WindowsFormsTestApplication1.Properties.Settings>
<setting name="myOwnSetting" serializeAs="String">
<value>Hi there!</value>
</setting>
</WindowsFormsTestApplication1.Properties.Settings>
</applicationSettings>
</configuration>
Visual Studio crea código C# para acceder a esta configuración automáticamente (es por eso que debe hacerlo en las propiedades del proyecto y no a través de editor de texto) - después de guardar los cambios, desde el mismo espacio de nombre puede leer su valor en la aplicación fácilmente a través del siguiente código:
var currentValue = Properties.Settings.Default.myOwnSetting;
Dada la applicationSettings
en el listado superior, esto sería recuperar la cadena "¡Hola!" para la variable currentValue
.
Nota que si ha creado myOwnSetting para la "Usuario" ámbito, a continuación, se almacena en una sección denominada <userSettings>
en lugar de <applicationSettings>
, pero todavía se puede acceder a ella con la línea de código de seguridad.
Otra diferencia de La configuración de "Usuario" es que tiene acceso de lectura-escritura, es decirse le permite hacer lo siguiente:
Properties.Settings.Default.myUserSetting = "Something else";
Properties.Settings.Default.Save();
Si intenta lo mismo con la determinación del alcance "Aplicación" myOwnSetting, que daría lugar a un error en tiempo de compilación que le dice que es de sólo lectura.
Si reinicia la aplicación, observará que myUserSetting ha cambiado al valor "Algo más", pero el valor anterior aún está en la aplicación.config. ¿Por qué esto es tan? La razón es que se considera como un valor predeterminado, y como dije antes, el ámbito "Usuario" está vinculado al perfil del usuario. Como consecuencia, el valor de "algo más" se almacena en
C:\Documents and Settings\USERID\Local Settings\Application Data\FIRMNAME\WindowsFormsTestApplicati_Url_tdq2oylz33rzq00sxhvxucu5edw2oghw\1.0.0.0
en un archivo llamado User.config
, que se ve de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<WindowsFormsTestApplication1.Properties.Settings>
<setting name="myUserSetting" serializeAs="String">
<value>Something else</value>
</setting>
</WindowsFormsTestApplication1.Properties.Settings>
</userSettings>
</configuration>
No se puede saber con exactitud el camino, ya que se crea automáticamente por .NET Framework, y se verá diferente en su PC. Pero puede ver que USERID es el ID de usuario de Windows de su usuario actual, FIRMNAME es parte de la información de ensamblaje que ha especificado y el nombre y la versión del ensamblado también se usan en la ruta.
Nota:
El <sectionGroup>
con <section>
declaración es obligatoria y su atributo de nombre debe coincidir con el espacio de nombres. El espacio de nombre debe aparecer exactamente una vez en la configuración, y solo hay una sección applicationSettings
permitida.
Como se puede ver en el archivo de configuración, el espacio de nombre se menciona explícitamente allí (WindowsFormsTestApplication1.Properties.Settings
). Como consecuencia, si desea acceder a la configuración desde el código que no está en el mismo espacio de nombres, es posible que deba utilizar una referencia totalmente calificada. Una vez dicho esto, tenga cuidado si copia toda la sección <applicationSettings>...</applicationSettings>
de la configuración de una aplicación a otra; es posible que necesite cambiar el espacio de nombre en la configuración de destino después.
Si está utilizando el Diseñador de configuración (ficha Configuración en el proyecto), se creará un archivo llamado Settings.Settings
(junto con Settings.Designer.cs
para acceder a las sessings a través de código C#) en la sección Propiedades de su proyecto. Esta es una copia de la configuración, ya que también se almacenará en su archivo Web.config
o App.config
(según el tipo de proyecto, solo para la configuración del alcance de la aplicación: la configuración del alcance del usuario se almacena según el perfil del usuario). Puede crear archivos adicionales *.settings
y usarlos (como se describe here).
Si eres no mediante el diseñador de configuración, o si está usando una herramienta como LinqPad, es posible que tenga que utilizar un enfoque diferente. Considere esto:
internal static string GetApplicationSetting(string key,
string nameSpace="Properties.Settings")
{
string xValue=null;
try
{
string path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
XDocument doc = XDocument.Load(path);
var xPathStr= string.IsNullOrEmpty(nameSpace)
? "//applicationSettings"
: $"//applicationSettings/{nameSpace}";
var settings=doc.XPathSelectElement(xPathStr).Elements().Where(
w => w.Name=="setting"
&& w.HasAttributes
&& w.Attribute("serializeAs").Value=="String"
);
var setting=settings.Where(f => f.HasAttributes
&& f.Attribute("name").Value==key).Elements();
xValue=setting.FirstOrDefault().Value;
}
catch {}
return xValue;
}
Usted puede leer tipo cadena applicationSettings
tratando la configuración como XDocument
. El ejemplo dado está limitado al tipo de cadena y puede recuperar la configuración desde la aplicación.ejemplo de configuración anterior de la siguiente manera:
var value=GetApplicationSetting("myOwnSetting", "WindowsFormsTestApplication1.Properties.Settings");
Del mismo modo, se puede crear una función similar GetUserSetting para la sección default <userSettings>
: Sólo tienes que copiar el código anterior, cambie el nombre del nombre de la función y reemplazar applicationSettings
en el xPathStr
por userSettings
.
Hay un método de actualización disponible para la configuración del usuario, que se describe here. Se pueden encontrar más detalles sobre la ubicación donde se almacenan las configuraciones del usuario there.
La sección <appSettings>
en la configuración funciona de manera diferente, ya que no distingue "usuario" y "Aplicación" el alcance y no es compatible con diferentes tipos de datos, sólo cadenas. Sin embargo, es posible leer y escribir fácilmente las claves/valores de configuración. Si usted está interesado en el código, se puede encontrar aquí (en stackoverflow):
how to read/write config settings of appSettings
Si no está seguro si debe usar AppSettings
o applicationSettings
, entonces read this antes de decidir que .
que sé, es hace mucho tiempo, pero podría marcar la respuesta que usted cree que es más útil, por favor? – Matt