7
votes

Comment utiliser des fichiers de configuration .NET (app.config, paramètres.Settings) pour enregistrer et restaurer toutes les données d'application?

Bien qu'il y ait beaucoup d'articles sur les fichiers de configuration .NET, je pense que mes exigences ne permettent aucune des solutions proposées (ou je ne comprends pas assez le processus pour que cela fonctionne pour moi).

La situation est que j'ai une application de formulaires Windows (pourrait aussi bien être une autre application) qui lie certains champs de saisie utilisateur (par exemple, une adresse IP), ainsi que des propriétés de formulaire (taille de la fenêtre, etc.) aux paramètres d'application (dans les propriétés -> Zone de réglages). D'après ce que je comprends, ces paramètres sont les mêmes que ceux représentés dans le fichier App.Config de mon projet. Je devrais donc pouvoir utiliser la classe System.Configuration.ConfigurationManager pour manipuler ces paramètres.

Ce que je veux à faire est de permettre à l'utilisateur d'exporter et d'importer tous les paramètres enregistrés. Plutôt que de faire la sérialisation de certains objets personnalisés ou de travailler avec des fichiers INI, je pensais qu'il serait plus facile de simplement enregistrer et de remplacer le fichier de configuration que l'application utilise.

Il est relativement facile d'enregistrer les paramètres actuels à Un fichier spécifié: xxx

Cependant, la restauration d'un fichier de configuration pour écraser les paramètres actuels se révèle difficile. Il semble que je puisse ouvrir un fichier de configuration comme SO xxx

mais je ne vois pas comment remplacer complètement tous les paramètres du courant config avec ceux du fichier importé. [EDIT: Cette surcharge est censée recevoir le chemin du fichier .exe, pas le fichier .config. L'ouverture d'un fichier EXE de cette manière lancera éventuellement une configurationErrorSexception si le code d'appel ne fait pas référence aux mêmes assemblages du fichier de configuration.]

peut-être que j'ai seulement besoin d'utiliser les méthodes décrites dans pour remplacer qu'une section de la configuration, et non du tout , mais je ne vois pas comment cela fonctionnerait à ce stade.

Des idées? Suis-je dans la bonne voie, ou devrais-je simplement utiliser des fichiers ini (ou autre chose)?


0 commentaires

5 Réponses :


1
votes

Je ne pense pas que le remplacement de l'ensemble du fichier de configuration est une bonne idée. Certains des paramètres de ce fichier peuvent contenir des paramètres à traiter vraiment tôt, avant que l'un de votre code ait eu la chance de faire quoi que ce soit, c'est-à-dire. Ceux liés au démarrage de .NET CLR.


2 commentaires

Il semble que vous ne manquiez pas de ne pas manipuler tout le dossier: en mémoire, au moins, il existe de nombreuses autres sections que de «appSettings» que je pense que je m'intéresse. Pour voir ce que je veux dire, essayez Var CurrentConfig = ConfigurationManager .Pénexeconfiguration (ConfigurationUserl Evel.peruserRroaminga Ndlocal); CurrentConfig.dump (); à Linqpad.


J'ai découvert que ce n'est pas la valeur "AppSettings" que je voulais changer, mais la valeur "usersettings". Plus précisément, c'est le nœud enfant .



3
votes

Puisque votre fichier app.config est un simple fichier XML que vous pouvez le charger dans un xdocument: xxx


J'ai corrigé le code xdocument.load () selon le commentaire de @ Pat


2 commentaires

Merci pour la recommandation, mais le chemin que vous avez spécifié n'est pas le bon pour changer les paramètres utilisateur. En outre, si quelqu'un d'autre veut essayer cela, la charge est une méthode statique de la classe XDocument, la syntaxe est donc Var Doc = xdocument.load (chemin) ;. Je continuerai à poursuivre la lecture et le remplacement des sections du fichier XML pour voir si cette méthode fonctionne, mais pas de chance.


Le chemin doit pointer sur votre app.config où je pensais que la section que vous souhaitez manipuler est.



3
votes

Il est préférable de ne pas écrire sur l'app.config mais utilisez le fichier de paramètres pour enregistrer les paramètres utilisateur modifiés. L'app.config et web.config ne doivent être utilisés que pour les valeurs en lecture seule.


4 commentaires

Ok, mais comment ça est fait? J'utilise déjà le fichier de paramètres pour persister l'entrée utilisateur entre les exécutions de l'application, mais comment puis-je enregistrer et restaurer ces informations sous forme de fichier distinct (importation / exportation)?


En tant que poste ci-dessous de Manu, pensez-y simplement comme un fichier XML.


Encore une fois, comment est-ce fait? Ma compréhension est que les paramètres "fichier" sont vraiment simplement app.config, en voyant comme si les paramètres sont stockés. Clarifications?


Maintenant que je comprends tout cela un peu mieux, je sais que ce n'est pas app.config que je voulais modifier. J'utilise les paramètres de l'application via le concepteur de paramètres et les liant aux propriétés des contrôles de mon interface graphique. Ces propriétés sont par utilisateur par utilisateur, elles sont donc stockées dans User.Config (générées lorsque le programme exécute - ce n'est pas dans la solution VS).



0
votes

Grâce à la suggestion de Manu pour simplement lire le fichier sous XML, j'ai piraté ensemble cette solution . (Cela ne fonctionne que dans le formulaire actuel pour les propriétés enregistrées en tant que chaînes, telles que la propriété texto d'une zone de texte. Cela ne fonctionnera pas, par exemple, si vous persistez la propriété de valeur d'un contrôle numérique.) Il fonctionne en utilisant l'exportation avec Un chemin d'accès au fichier à enregistrer, qui produit un fichier comme ci-dessous: xxx

alors que vous importez le fichier et que tous les paramètres sont modifiés dans l'application (n'oubliez pas de. () À un moment donné). Si quelque chose ne va pas, les paramètres reviendront en arrière. xxx


2 commentaires

J'aimerais savoir pourquoi quelqu'un considère qu'une mauvaise réponse et que quelqu'un produisait une "bonne" réponse. Tout ce que j'ai à dire, c'est que ce code fonctionne et il n'y a pas eu d'autres solutions de travail présentées.


Au fait, cette solution ne manipule pas le fichier app.config. Il modifie la version en mémoire de User.Config, qui est transférée dans le fichier sur l'application Fermer.



2
votes

Étant donné que je n'ai reçu aucune autre réponse et que je n'étais pas satisfait de ma solution précédente, j'ai de nouveau posé la question, a fait de plus en plus de recherches et a été en mesure de trouver une meilleure réponse. Voir Comment charger un séparé Paramètres de l'application Fichier de manière dynamique et fusionner avec les paramètres actuels? pour le code et l'explication.


0 commentaires