2012-07-02 11 views
11

He creado una pequeña GUI para la administración de algunas configuraciones en un archivo app.config. La GUI se lanza como parte de mi producto, lo que permite cambiar los valores en el archivo app.config, sin abrir esto en un editor de texto.Evite información específica de la versión en configSection en app.config

Las propiedades se implementan en una configuración de configuración personalizada, por lo que es fuertemente tipeado en el código. Mi problema es que cuando se actualiza el archivo app.config (al guardar desde la interfaz gráfica de usuario), el nombre completo de mi conjunto está escrito en el configSection así:

<section name="ConfigurationSettings" type="PerformanceDude.MSBuildShellExtension.Common.ConfigurationSettings, Common, Version=2.2.1.0, Culture=neutral, PublicKeyToken=1ab1b15115e63xxx" /> 

Cuando actualizo a esta asamblea un nuevo número de versión, la versión del ensamblado del código GUI ya no coincide con las referencias de ensamblaje en la aplicación.config.

Éste es cómo cargar los ajustes:

var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = ConfigFilePath }, ConfigurationUserLevel.None); 
var settings = Config.GetSection("ConfigurationSettings") as ConfigurationSettings; 

Así es como puedo guardar los ajustes:

config.Save(ConfigurationSaveMode.Minimal, true); 

que no quieren escribir un script de actualización de cambiar la versión de actualización cada vez que . ¿Alguien sabe una gran solución para este problema?

+2

¿Es posible incluir el código que usa para serializar y guardar la configuración, por favor? – dash

+0

El código de cargar y guardar está ahora en la descripción :) – ThomasArdal

+0

¿Alguna vez descubrió una solución para esto? – Zoomzoom

Respuesta

2

He tenido que hacer algo similar antes. Terminé cargando el archivo de configuración como xml, deserializando las secciones relevantes en objetos y luego volviendo a ponerlos en el xml. Al evitar la API de configuración .net de esa forma, se evitan problemas con la versión.

Otro enfoque es redirigir la versión anterior del ensamblaje a una nueva versión. Si su ensamblado está en el GAC, puede usar los archivos de política para hacer esto y desplegarlos cuando implemente una nueva versión; entonces los números de versión en la configuración no importarán.

+0

En realidad --- si agrega la DLL de configuración al GAC, entonces no necesita un nombre completamente calificado al definir su sección de configuración. Todo lo que necesita es (clase, ensamblaje) –

+0

Sure @SASS_Shooter, pero el punto es que no necesita preocuparse si algo pone el número de versión allí si tiene un archivo de política. – tallseth

+1

La DLL no está en el GAC. Si cargo la configuración como XML, los datos no se escribirán con fuerza en C#. Toda la idea de utilizar una sección de configuración fue para mí poder cargar y guardar cada propiedad a través de un objeto C# que contiene propiedades fuertemente tipadas. Gracias por su propuesta, sin embargo :) – ThomasArdal

Cuestiones relacionadas