2012-07-02 7 views
11

Ho creato una piccola GUI per l'amministrazione di alcune impostazioni in un file app.config. La GUI viene rilasciata come parte del mio prodotto, rendendo possibile modificare i valori nel file app.config, senza aprirlo in un editor di testo.Evita informazioni specifiche della versione in configSection in app.config

Le proprietà sono implementate in una configSection personalizzata, rendendola fortemente digitata nel codice. Il mio problema è che quando il file app.config viene aggiornato (quando salvo dalla GUI), il nome completo del mio assemblaggio è scritto nel configSection come questo:

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

Quando aggiorno questa assemblea a un nuovo numero di versione, la versione dell'assembly del codice della GUI non corrisponde più ai riferimenti dell'assembly in app.config.

Questo è quanto ho caricare le impostazioni:

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

Questo è quanto ho salvare le impostazioni:

config.Save(ConfigurationSaveMode.Minimal, true); 

non voglio scrivere uno script di aggiornamento modificando l'aggiornamento di versione ogni volta che . Qualcuno conosce un'ottima soluzione a questo problema?

+2

È possibile includere il codice che si usa per serializzare e salvare la configurazione per favore? – dash

+0

Il carico e il codice di salvataggio sono ora nella descrizione :) – ThomasArdal

+0

Hai mai trovato una soluzione a questo? – Zoomzoom

risposta

2

Ho dovuto fare una cosa simile prima. Ho finito per caricare il file di configurazione come xml, deserializzando le sezioni pertinenti in oggetti, quindi rimettendole nell'xml. Evitare l'API di configurazione .net in questo modo evitare problemi con la versione.

Un altro approccio consiste nel reindirizzare la versione precedente dell'assembly a una nuova versione. Se l'assembly è in GAC, è possibile utilizzare i file di criteri per eseguire questa operazione e distribuirli quando si distribuisce una nuova versione; quindi i numeri di versione nella configurazione non contano.

+0

In realtà --- se si aggiunge la DLL di configurazione al GAC, non è necessario un nome completo quando si definisce la sezione di configurazione. Tutto ciò che serve è (classe, assemblaggio) –

+0

Certo @SASS_Shooter, ma il punto è che non ha bisogno di preoccuparsi se qualcosa inserisce il numero di versione lì se ha un file di politica. – tallseth

+1

La DLL non si trova nel GAC. Se carico la config come XML, i dati non saranno fortemente digitati in C#. L'idea di utilizzare una sezione di configurazione era per me poter caricare e salvare ogni proprietà attraverso un oggetto C# contenente proprietà fortemente tipizzate. Grazie per la tua proposta, però :) – ThomasArdal

Problemi correlati