Nous avions une rare exception lors de la lecture des paramètres de l'utilisateur standard .NET (celles-ci figurent dans "Propriétés du projet" dans VS 2008):
//How we read Settings settings = Settings.Default; _ourStaticMemberVariable = settings.OurValue; //How we save Settings settings = Settings.Default; settings.OurValue = "Our Value"; settings.Save();
3 Réponses :
La manière de récupérer par programme est de faire ce que vous avez fait manuellement - supprimez le fichier de paramètres utilisateur. puis em> appelez C'est un événement assez rare, mais ce n'est pas totalement inouïs. Non seulement votre programme peut cracer lors de la rédaction du fichier de paramètres utilisateur, le fichier lui-même est utilisé par l'utilisateur, de sorte que d'autres programmes que l'utilisateur fonctionne pourrait gâcher avec elle. P>
Pour éviter cette vulnérabilité particulière, persistez les paramètres utilisateur dans un magasin durable avec une intégrité transactionnelle, c'est-à-dire une base de données. (Vous aurez toujours des vulnérabilités, tout simplement pas.) C'est beaucoup de travail pour ce que dans la plupart des cas sera une amélioration marginale de la fiabilité. Mais "dans la plupart des cas" ne signifie pas "dans tous les cas;" le tien peut le justifier. p> Paramètres.Reset code>. (Vous pouvez également écrire un nouveau fichier de paramètres utilisateur avec des valeurs par défaut au lieu de la supprimer, mais si vous utilisez correctement le gestionnaire de configuration, c'est essentiellement la même chose.) P>
Comment puis-je obtenir le chemin du fichier de paramètres utilisateur? Une base de données est surchargée pour mon scénario.
Notez que l'InnErexception, de type System.Configuration.configurationErrorSexception, a une propriété Nom de fichier ...
Je suppose que je vais devoir faire une méthode d'assistance pour extraire le nom de fichier de l'exception interne ici.
String FileName = ((ConfigurationErrorSexception) E.innerexception) .Filename; code> devrait le faire.
Appel de réinitialisation () Après avoir supprimé le fichier entraînera la même exception. Vous devez redémarrer l'application après avoir supprimé le fichier de configuration. Détails ici: Connect.Microsoft.com/visualstudio/feedback/Détails/497189/...
Redémarrer l'application n'est pas si géniale ... merveille si cela peut être corrigé
Dans mon cas, j'ai vérifié l'exception interne comme suggérée par @technophile. J'ai ouvert le chemin, supprimé le fichier là-bas et a ensuite été capable de construire avec succès.
[STAThread] private static void Main(string[] args) { try { // ... } catch (System.Configuration.ConfigurationErrorsException ex) { var config = ((System.Configuration.ConfigurationErrorsException)ex.InnerException).Filename; // notify user, ask them to restart System.IO.File.Delete(config); Application.Exit(); } }
C'est exactement ce que j'ai fait, sauf que je revienne mon application comme un nouveau processus plutôt que de sortir.
Voici une solution qui ne vous oblige pas à quitter l'application avec Kudos à Jarle ( http://www.codeproject.com/articles/30216/handling-corrupt-user-config-settings?msg=3608682xxx3608682xx ). Tôt, avant que les paramètres ne soient appelés, utilisez ce essentiellement, plutôt que de compter sur des séances pour lancer l'erreur, lisez le fichier avec le configurationManager, de cette façon la version du système n'entre jamais dans un mauvais état. p> p>
Quel est le fichierwatcher pour ?? Je pensais que Supprimer ne reviendra pas tant que le fichier ne sera supprimé
Tu serais surpris