7
votes

Persister les données dans l'app.config entre les sessions de débogage

Donc, longue histoire courte, je développe une application qui utilisera certaines informations de configuration pouvant être modifiées au moment de l'exécution de l'application elle-même. Dans le but que j'ai pensé à utiliser les paramètres classe.

Le problème, la pensée, est que les informations ne sont pas persistées entre différentes exécutions de l'application:

Run 1 ) xxx

exécuté 2) xxx

( tous deux impression exactement la même sortie ) < / p>

Les deux exécutions apparaissent la même première impression "utilisateur par défaut", bien que sur la 2e course, je voudrais obtenir "ABC", indiquant que les informations ne sont pas persistées entre différentes exécutions d'applications.

i reconnaissez que cela doit être associé à la façon dont Visual Studio gère des fichiers .config, mais même je voudrais savoir comment corriger ce comportement (méchant)?


1 commentaires

Avez-vous essayé d'appeler Enregistrer sur les paramètres ( de MS ). Ou pour plus d'efforts «élaborés», vous pouvez faire configurationmanager.opénexeconfiguration (ou OpenMAppeSeconfiguration ) - puis Enregistrer , sauvegarde (par exemple, Ceci )


5 Réponses :


7
votes

Par défaut, app.config n'est pas copié directement, c'est plutôt que le contenu est placé dans .Config fichier dans le dossier de sortie. Les paramètres de copie ne s'appliquent pas à cette opération.

En règle générale, ce n'est pas une bonne pratique pour que l'application puisse changer sa propre app.config. Si vous développez une application pouvant être utilisée par plusieurs utilisateurs sur le même PC, alors Utilisez les paramètres à la place. De cette façon, chaque utilisateur peut avoir ses propres paramètres.

Pour les services et les paramètres à l'échelle du système, envisagez d'utiliser un autre stockage, comme un fichier de configuration distinct, un registre ou une base de données.

Modifier sur les paramètres d'économie:

Lorsque vous utilisez la classe de paramètres, vous devez appeler Enregistrer () pour l'écrire dans le fichier, sinon les modifications des paramètres seront supprimés lorsque l'application est fermée. Si vous terminez souvent votre demande pendant le développement et que cela n'atteint pas son code final (où vous passeriez normalement un appel à enregistrer ()), vous avez ensuite plusieurs options:

  1. Utilisez la fenêtre de surveillance de débogueur pour appeler Save (). Pour ce faire, placez une expression comme paramètres.default.save () dans la fenêtre de surveillance et rafraîchissez-le à chaque fois que vous souhaitez enregistrer.
  2. Vous pouvez essayer d'utiliser une minuterie pour appeler chaque seconde.
  3. Vous pouvez insérer des appels Enregistrer () dans votre code après modification des paramètres.
  4. Vous pouvez écrire des paramètres personnalisés fournisseur ou wrapper qui enregistre immédiatement les paramètres après chaque changement.

1 commentaires

Mon application ne sera pas utilisée par plusieurs utilisateurs. Je veux juste un moyen rapide de charger / stocker des données spécifiques dans mon application. D'après ce que j'ai lu, la classe de paramètres a été créée à cet effet (et je pense que c'est aussi la raison pour laquelle ils vous permettent de définir des paramètres via la classe de paramètres). Donc, ma question initiale est toujours: lorsque vous développez, comment éviter de perdre les données que je sauve les fichiers entre exécution des exécutions?



2
votes

Ce code avec l'ensemble de propriétés d'utilisateur avec utilisateur code> Scope: xxx pré>

enregistre le réglage sur un emplacement obscur: p>

C: \ Utilisateurs \ Nom d'utilisateur \ Appdata \ local \ ConsoleApplication4 \ ConsoleApplication4.exe_url_acauylh2b.url_acauylh2bl2j4ed0ilz0mujq5aomfmu \ 1.0.0.0 p>

Donc, même dans votre app.config strong> Vous voyez toujours "utilisateur par défaut" après avoir exécuté l'application multiple TEMPS: P>

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <ConsoleApplication4.Settings1>
            <setting name="User" serializeAs="String">
                <value>abc</value>
            </setting>
        </ConsoleApplication4.Settings1>
    </userSettings>
</configuration>


1 commentaires

Désolé pour ça, peut-être que c'était juste le sauvegarde (); que vous manquiez. Ou que cette application est censée être en lecture seule.



1
votes

Je ne sais pas comment cela est différent de votre approche, mais j'ai résolu ce problème à l'aide du fichier de paramètres.

Tout d'abord, créez le fichier de paramètres dans le menu Propriétés de votre projet. Faites un clic droit sur le projet dans l'explorateur de la solution et sélectionnez «Propriétés». Allez dans l'onglet Paramètres et créez le fichier de paramètres. Une fois le fichier créé, vous devez voir un datagrid où vous pouvez entrer un nom / type / portée / valeur. Configurez toutes les variables que vous souhaitez utiliser ici (je ne sais pas si vous pouvez créer plus de variables au moment de l'exécution, mais je ne le pense pas).

Maintenant, dans Code, vous pouvez utiliser la classe de propriétés qui figurera dans l'espace de noms par défaut de votre projet.

Pour lire un réglage: xxx

et pour enregistrer un paramètre: xxx


0 commentaires

2
votes

Ce qui suit est ce que j'ai utilisé pour enregistrer quelque chose dans le fichier app.config. xxx

espère que cela aide.


0 commentaires

-1
votes

Peut-être que vous pouvez utiliser le système de fichiers pour créer un lien symbolique entre les 2 fichiers afin qu'il modifie réellement le fichier dans la source. Cependant, je ne peux pas penser à une solution rapide pour le compilateur de ne pas écraser le fichier de configuration (et éliminez ainsi le lien).

Au moins cette approche ne nécessite pas de coder une solution de contournement. Il n'influence pas non plus la façon dont vous souhaitez enregistrer les paramètres (comme passer de la valeur par défaut à l'utilisateur). Donc, ce n'est efficace que lorsque vous développez .


0 commentaires