Nous avons eu une exception rare se produire lors de la lecture des paramètres utilisateur standard .Net (ceux que l'on trouve dans les "propriétés du projet" dans VS 2008):
System.Configuration.ConfigurationErrorsException a été interceptée
Message="L'initialisation du système de configuration a échoué"
Source="System.Configuration"
BareMessage="L'initialisation du système de configuration a échoué"
Ligne=0
StackTrace:
at System.Configuration.ConfigurationManager.PrepareConfigSystem()
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
at System.Diagnostics.DiagnosticsConfiguration.Initialize()
at System.Diagnostics.DiagnosticsConfiguration.get_IndentSize()
at System.Diagnostics.TraceInternal.InitializeSettings()
at System.Diagnostics.TraceInternal.get_Listeners()
InnerException: System.Configuration.ConfigurationErrorsException
Message="Une fin de fichier inattendue s'est produite. Les éléments suivants ne sont pas fermés : setting, SettingsTest.Properties.Settings, userSettings, configuration. Ligne 7, position 1. (C:\\Documents and Settings\\USER\\Local Settings\\Application Data\\Hitcents\\SettingsTest.vshost.exe_Url_ghwhc20utv4toanuinmj0pfsljthcugo\\1.0.0.0\\user.config ligne 7)"
Source="System.Configuration"
BareMessage="Une fin de fichier inattendue s'est produite. Les éléments suivants ne sont pas fermés : setting, SettingsTest.Properties.Settings, userSettings, configuration. Ligne 7, position 1."
Filename="C:\\Documents and Settings\\USER\\Local Settings\\Application Data\\Hitcents\\SettingsTest.vshost.exe_Url_ghwhc20utv4toanuinmj0pfsljthcugo\\1.0.0.0\\user.config"
Ligne=7
StackTrace:
at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
at System.Configuration.ClientConfigurationSystem.OnConfigRemoved(Object sender, InternalConfigEventArgs e)
InnerException: System.Xml.XmlException
Message="Une fin de fichier inattendue s'est produite. Les éléments suivants ne sont pas fermés : setting, SettingsTest.Properties.Settings, userSettings, configuration. Ligne 7, position 1."
Source="System.Xml"
LineNumber=7
LinePosition=1
SourceUri=""
StackTrace:
at System.Xml.XmlTextReaderImpl.Throw(Exception e)
at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
at System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String arg)
at System.Xml.XmlTextReaderImpl.ThrowUnclosedElements()
at System.Xml.XmlTextReaderImpl.ParseElementContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Xml.XmlTextReaderImpl.Skip()
at System.Xml.XmlTextReader.Skip()
at System.Configuration.XmlUtil.StrictSkipToNextElement(ExceptionAction action)
at System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(XmlUtil xmlUtil, String parentConfigKey, Boolean inLocation, String locationSubPath, OverrideModeSetting overrideMode, Boolean skipInChildApps)
at System.Configuration.BaseConfigurationRecord.ScanSectionsRecursive(XmlUtil xmlUtil, String parentConfigKey, Boolean inLocation, String locationSubPath, OverrideModeSetting overrideMode, Boolean skipInChildApps)
at System.Configuration.BaseConfigurationRecord.ScanSections(XmlUtil xmlUtil)
at System.Configuration.BaseConfigurationRecord.InitConfigFromFile()
InnerException:
*NOTE: ceci est recréé à partir d'une application de test.
J'ai ouvert le fichier user.config et la moitié était manquante.
Je suppose que notre application a été arrêtée brusquement pour une raison ou une autre.
Cela semble très rare, voici comment nous interagissons avec les paramètres:
//Comment nous lisons
Paramètres settings = Paramètres par défaut;
_notreVariableMembreStatique = settings.NotreValeur;
//Comment nous sauvegardons
Paramètres settings = Paramètres par défaut;
settings.NotreValeur = "Notre Valeur";
settings.Save();
Y a-t-il quelque chose de mal dans notre utilisation? Les deux appels ont un try-catch qui met en place certaines valeurs par défaut, mais les valeurs doivent pouvoir être réinitialisées depuis notre application.
Dans cet état, notre application ne peut pas enregistrer de nouveaux paramètres - et je ne peux pas trouver de bonne façon de récupérer de manière programmatique. J'ai dû trouver manuellement le user.config et le supprimer.
J'ai également essayé d'appeler Settings.Reset(), etc. mais j'obtiens la même exception.
Des idées sur comment résoudre ceci? Ou devrions-nous plutôt écrire notre propre système de paramètres ou enregistrer des paramètres persistants d'une autre manière?
EDIT: Une solution de contournement est de supprimer le fichier depuis le code, si vous obtenez une ConfigurationErrorsException.
Quelqu'un sait comment obtenir le chemin complet du fichier user.config?