tiempo modificar ejecucion configuracion archivo app .net configuration settings app-config

.net - modificar - configurationmanager.appsettings c#



¿Cómo editar la configuración de la aplicación? App.config la mejor manera de ir? (9)

¿Cómo hace referencia a la clase de Configuraciones en su código? ¿Estás utilizando la instancia predeterminada o creando un nuevo objeto Configuración? Creo que la instancia predeterminada usa el valor generado por el diseñador que se vuelve a leer desde el archivo de configuración solo cuando se abren las propiedades. Si crea un objeto nuevo, creo que el valor se lee directamente desde el archivo de configuración en sí, en lugar del atributo generado por el diseñador, a menos que la configuración no exista en el archivo app.config.

Por lo general, mi configuración estará en una biblioteca en lugar de directamente en la aplicación. Establecí los valores predeterminados válidos en el archivo de propiedades. Luego puedo anularlos agregando la sección de configuración apropiada (recuperada y modificada del archivo app.config de la biblioteca) en la configuración de la aplicación (ya sea web.config o app.config, según corresponda).

Utilizando:

Settings configuration = new Settings(); string mySetting = configuration.MySetting;

en lugar de:

string mySetting = Settings.Default.MySetting;

es la clave para mí

Para mi proyecto, tengo la configuración que agregué a través de la Configuración en las propiedades del proyecto.

Descubrí rápidamente que la edición directa del archivo app.config no parece realmente actualizar el valor de la configuración. Parece que tengo que ver las propiedades del proyecto cuando realizo un cambio y luego recompilo.

  • Me pregunto ... ¿cuál es la mejor y más fácil manera de manejar configuraciones personalizables para un proyecto? Pensé que esto sería pan comido con la forma en que .Net lo maneja ... lástima de mí.

  • ¿Es posible utilizar uno de los ajustes, AppSettings , ApplicationSettings o UserSettings para manejar esto?

¿Es mejor simplemente escribir mi configuración en el archivo de configuración personalizada y manejar las cosas por mí mismo?

En este momento ... ¡Estoy buscando la solución más rápida !

Mi entorno es C #, .Net 3.5 y Visual Studio 2008.

Actualizar

Estoy tratando de hacer lo siguiente:

protected override void Save() { Properties.Settings.Default.EmailDisplayName = this.ddEmailDisplayName.Text; Properties.Settings.Default.Save(); }

Me da un error de solo lectura cuando compilo.


Esto es una tontería ... ¡y creo que tendré que disculparme por perder el tiempo de todos! Pero parece que solo tengo que configurar el alcance para el usuario en lugar de la aplicación y puedo escribir el nuevo valor.


No estoy seguro de si esto es lo que está buscando, pero puede actualizar y guardar la configuración desde la aplicación:

ConsoleApplication1.Properties.Settings.Default.StringSetting = "test"; ConsoleApplication1.Properties.Settings.Default.Save ();


EDIT: Mi error. Entendí mal el propósito de la pregunta original.

TEXTO ORIGINAL:

A menudo configuramos nuestra configuración directamente en el archivo app.config, pero generalmente esto es para nuestra configuración personalizada.

Ejemplo de app.config:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="MySection" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <connectionStrings> <add name="Default" connectionString="server=MyServer;database=MyDatabase;uid=MyDBUser;password=MyDBPassword;connection timeout=20" providerName="System.Data.SqlClient" /> </connectionStrings> <MySection> <add key="RootPath" value="C:/MyDirectory/MyRootFolder" /> <!-- Path to the root folder. --> <add key="SubDirectory" value="MySubDirectory" /> <!-- Name of the sub-directory. --> <add key="DoStuff" value="false" /> <!-- Specify if we should do stuff --> </MySection> </configuration>


System.Configuration.Configuration config =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings["oldPlace"].Value = "3"; config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection("appSettings");

Intenta con este código, es fácil.

Atte: Erick Siliezar


Prueba esto:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!--- -> </configSections> <userSettings> <Properties.Settings> <setting name="MainFormSize" serializeAs="String"> <value> 1022, 732</value> </setting> <Properties.Settings> </userSettings> <appSettings> <add key="TrilWareMode" value="-1" /> <add key="OptionsPortNumber" value="1107" /> </appSettings> </configuration>

Lectura de valores del archivo App.Config:

//This method will read the value of the OptionsPortNumber in the //above app.config file. private int LoadConfigData () { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); // AppDomain.CurrentDomain.SetupInformation.ConfigurationFile // points to the config file. doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); int smartRefreshPortNumber = 0; foreach (XmlNode node in doc.ChildNodes.Item(1)) { //Searching for the node “” if (node.LocalName == "appSettings") { smartPortNumber =Convert.ToInt32(node.ChildNodes.Item(1).Attributes[1].Value); } } Return smartPortNumber; }

Actualizando el valor en el App.config:

//This method will read the value of the OptionsPortNumber in the //above app.config file. private void UpdateConfigData() { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); //Looping through all nodes. foreach (XmlNode node in doc.ChildNodes.Item(1)) { //Searching for the node “” if (node.LocalName == "appSettings") { if (!dynamicRefreshCheckBox.Checked) { node.ChildNodes.Item(1).Attributes[1].Value = this.portNumberTextBox.Text; } else { node.ChildNodes.Item(1).Attributes[1].Value = Convert.ToString(0); } } } //Saving the Updated values in App.config File.Here updating the config //file in the same path. doc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); }


Tuve el mismo problema hasta que me di cuenta de que estaba ejecutando la aplicación en modo de depuración, por lo tanto, la nueva clave de appSetting se estaba escribiendo en [applicationName]. archivo vshost.exe.config .

Y este archivo vshost.exe.config NO conserva ninguna clave nueva una vez que se cierra la aplicación, sino que vuelve a [nombre de aplicación]. contenido del archivo exe.config

Lo probé fuera del depurador, y los diversos métodos aquí y en otros lugares para agregar una aplicación de configuración La clave de configuración funciona bien. La nueva clave se agrega a: [nombre de aplicación]. exe.config .


También traté de resolver esta necesidad y ahora tengo una bonita ConsoleApplication, que quiero compartir: (App.config)

Lo que verá es:

  1. Cómo leer todo AppSetting propery
  2. Cómo insertar una nueva propiedad
  3. Cómo eliminar una propiedad
  4. Cómo actualizar una propiedad

¡Que te diviertas!

public void UpdateProperty(string key, string value) { Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); KeyValueConfigurationCollection appSettings = config.AppSettings.Settings; // update SaveBeforeExit config.AppSettings.Settings[key].Value = value; Console.Write("...Configuration updated: key "+key+", value: "+value+"..."); //save the file config.Save(ConfigurationSaveMode.Modified); Console.Write("...saved Configuration..."); //relaod the section you modified ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); Console.Write("...Configuration Section refreshed..."); } public void ReadAppSettingsProperty() { try { var section = ConfigurationManager.GetSection("applicationSettings"); // Get the AppSettings section. NameValueCollection appSettings = ConfigurationManager.AppSettings; // Get the AppSettings section elements. Console.WriteLine(); Console.WriteLine("Using AppSettings property."); Console.WriteLine("Application settings:"); if (appSettings.Count == 0) { Console.WriteLine("[ReadAppSettings: {0}]", "AppSettings is empty Use GetSection command first."); } for (int i = 0; i < appSettings.Count; i++) { Console.WriteLine("#{0} Key: {1} Value: {2}", i, appSettings.GetKey(i), appSettings[i]); } } catch (ConfigurationErrorsException e) { Console.WriteLine("[ReadAppSettings: {0}]", e.ToString()); } } public void updateAppSettingProperty(string key, string value) { // Get the application configuration file. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); string sectionName = "appSettings"; config.AppSettings.Settings.Remove(key); config.AppSettings.Settings.Add(key, value); SaveConfigFile(config); } public void insertAppSettingProperty(string key, string value) { // Get the application configuration file. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); string sectionName = "appSettings"; config.AppSettings.Settings.Add(key, value); SaveConfigFile(config); } public void deleteAppSettingProperty(string key) { // Get the application configuration file. System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); config.AppSettings.Settings.Remove(key); SaveConfigFile(config); } private static void SaveConfigFile(System.Configuration.Configuration config) { string sectionName = "appSettings"; // Save the configuration file. config.Save(ConfigurationSaveMode.Modified); // Force a reload of the changed section. This // makes the new values available for reading. ConfigurationManager.RefreshSection(sectionName); // Get the AppSettings section. AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection(sectionName); Console.WriteLine(); Console.WriteLine("Using GetSection(string)."); Console.WriteLine("AppSettings section:"); Console.WriteLine(appSettingSection.SectionInformation.GetRawXml()); } }

El archivo de configuración se ve como:

<configuration> <configSections> </configSections> <appSettings> <add key="aNewKey1" value="aNewValue1" /> </appSettings>

¡Bien, entonces no tuve ningún problema con AppSettings con esta Solución! Que te diviertas... ;-) !