IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Settings perdues au rebuild !


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut Settings perdues au rebuild !
    Voilà, pour mon application, je me sert des Settings pour sauvegarder la position de la fenêtre, sa taille, ..., et bientôt, les préférences utilisateur.

    J'ai même réussi à bider tout ça dans mon Xaml, bref, c'est la classe . Par contre, il y a quand même un petit souci :
    Dès que je rebuild mon application, tous mes settings reprennent leur valeur par défaut. Y aurait-il un moyen d'éviter cela ? A mon avis il doit recompiler/écraser le fichier de settings...

    Pour le moment ce n'est pas trop génant, mais lorsque ça sera utilisé par des vrais gens, ça m'étonnerait que ça leur plaise de perdre leur préférences à chaque nouvelle release...

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Tes "vrais gens" installeront certainement ton outils. Et donc auront un fichier setting dans leur répertoire d'installation.
    Lorsque tu fera une nouvelle release soit tu fera un upgrade soit tu réinstalleras l'application.
    Dans le premier cas, ton upgrade pourrais juste remplacer les fichiers de ton appli qui sont concernés par l'évolution (tes dll et ton executables par exemples) sans toucher au fichiers settings.
    Si tu as besoin de changer le fichier settings (rajout par exemples des préférences utilisateurs) ou si tu veux faire les upgrade en désinstallant l'ancienne version et en réinstallant la nouvelle, alors tu devra gérer la conservation des settings toi même.
    Je m'explique : Ton programme setup, ou ton patch, pourrait lire le fichier de settings -> récupérer les valeurs -> les copier dans un fichier texte -> le placer dans un répertoire temporaire -> patcher ou installer la nouvelle version -> recopier les settings souvegardé dans ton nouveau fichier settings.

    Bref je ne crois pas qu'il y ait d'option qui permette de le faire directement mais tu peux gérer cela toi même via l'installeur ou le programme d'upgrade.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut
    Alors, pour mettre les choses au clair, les Settings dont je parle sont gérées comme celles-ci : http://www.codeproject.com/useritems...esSettings.asp

    Le problème c'est que je ne sais pas ou elles sont stockées une fois que c'est buildé. Il y a bien un fichier "app.config" dans le répertoire de mon projet, et un "MyApp.exe.config", ainsi qu'un "MyApp.vshost.exe.config" dans le répertoire bin\debug.

    Tous ces fichiers ne contiennent que les valeurs par défaut. Je ne trouve pas où sont stockées les valeurs sauvegardées entre 2 exécutions ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Si tu as besoin de changer le fichier settings (rajout par exemples des préférences utilisateurs) ou si tu veux faire les upgrade en désinstallant l'ancienne version et en réinstallant la nouvelle, alors tu devra gérer la conservation des settings toi même.
    Je m'explique : Ton programme setup, ou ton patch, pourrait lire le fichier de settings -> récupérer les valeurs -> les copier dans un fichier texte -> le placer dans un répertoire temporaire -> patcher ou installer la nouvelle version -> recopier les settings souvegardé dans ton nouveau fichier settings.
    Du coup, je ne vois pas trop l'interet des fichiers configs.
    Pour sauvegarder des settings d'une execution à une autre c'est tres bien, mais lorqu'on veut installer un nouvelle release, on en arrive a faire de sombres manipulations de fichiers, de recopie dans dans des fichiers temporaires etc etc ....

    Je me demande alors s'il ne vaut pas mieux stocker une fois pour toutes les préférences dans un fichier *.INI dans C:/Windows.

    Chaque nouvelle release irait simplement relire et ecrire ce fichier,toujours au meme endroit.

    Bien sur , on peut faire un fichier XML à la place d'un INI ; mais bon, le principe est le meme ..

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Bah le fichier settings n'est pas justement un fichier xml ?
    Qu'elle que soit la données que ton programme écrit dans un fichier en bdr ou en bd, ou ailleurs, l'idée est toujours la même, si ton application lors d'une réinstallation supprime l'élément ou cette donnée et stocké et que tu veux conservé, tu es bien obligé de le faire toi même.
    Tu va me dire que l'on pourrait éviter de d'écraser la structure contenant la donée, mais que faire dans le cas ou tu change de structure ? Faut bien aller la récupérer changer la structure et réaffectr la donnée.
    Dans mon précédent poste je n'ai pas développer tous les cas.
    Et puis les Settings proposé en c# n'est qu'une encapsulation d'un fichier XML config avec des méthodes facilitant l'accés au données et leurs modifications.
    Pas de miracle en informatique (sauf le fonctionnement de certain réseaux entreprises ), si tu écrase le conteneur d'une donnée et que tu veux conserver la donnée, il faut que ton programme ou un autre la copie temporairement ailleurs, écrase le conteneur et recopie la donnée dans le nouveau conteneur.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Par défaut
    Citation Envoyé par ced600 Voir le message
    si ton application lors d'une réinstallation supprime l'élément ou cette donnée et stocké et que tu veux conservé, tu es bien obligé de le faire toi même.
    oui je suis d'accord avec toi, sauf que dans le cas des settings, il me semble qu'il s'agit d'un besoin réccurent que de conserver les settings lors d'une reinstall !

    Alors,pourquoi le Framework . Net pas propose -t-il pas de solution ? Lier le fichier de config à l'assembly, c'est bien, mais ce serait quand meme encore mieux de pouvoir enlever ce lien !
    Ainsi on ne referencerait qu'un seul fichier .config; independant des versions de l'assembly , et on pourrait beneficier des benefices de l'encapsulation et des methodes d'accees aux données.

    Dans ce cas , Si on veut faire évoluer la structure de ficheir de Config, on peut gerer cela dans l'appli, à la première ouverture du fichier de config par exemple.

    Au lieu de ca, la solution qui nous reste est de bidouiller dans le classe Installer... Dans la classe Installer, on peut en effet retrouver l'ancien fichier de config; prendre les valeurs, et les recopier dans le nouveau ,c'est pas tres joli.
    Ou alors, on repasse par ce bon ficher placé en dur ( le .Ini ou equivalent), et alors là, on en beneficie plus de l'encapsulation des settings, et des super methodes d'accés....

    C'est vraiment dommage.

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Au lieu de ca, la solution qui nous reste est de bidouiller dans le classe Installer... Dans la classe Installer, on peut en effet retrouver l'ancien fichier de config; prendre les valeurs, et les recopier dans le nouveau ,c'est pas tres joli.
    C'est un peu le but d'un installer et d'un updater, non ?
    Faire les bidouille pour que cela marche

    Dans ce cas , Si on veut faire évoluer la structure de ficheir de Config, on peut gerer cela dans l'appli, à la première ouverture du fichier de config par exemple.
    Si on veut on pourrais tout faire lors de la première execution, même une auto installation, mais dans ce cas un peu lourd l'exécutable

    Mais je comprends ce que tu veux dire, disons que ms n'a pas pensé à tout
    Ils sont pas parfait quand même .
    En plus certain préfères certainement que cela soit comme cela alors que d'autre non. Difficile de rendre tout le monde content .

    Personnellement, je n'aime l'utilisation des settings, je préfère être libre sur les fichiers de config, et je gère le tout moi même. Se faire son propre parseur de fichier XML et le mettre dans une DLL cela ne doit pas être très long (pour l'instant moi je fais avec les bon vieux fichier texte).

  8. #8
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par GroXx Voir le message
    Voilà, pour mon application, je me sert des Settings pour sauvegarder la position de la fenêtre, sa taille, ..., et bientôt, les préférences utilisateur.

    J'ai même réussi à bider tout ça dans mon Xaml, bref, c'est la classe . Par contre, il y a quand même un petit souci :
    Dès que je rebuild mon application, tous mes settings reprennent leur valeur par défaut. Y aurait-il un moyen d'éviter cela ? A mon avis il doit recompiler/écraser le fichier de settings...

    Pour le moment ce n'est pas trop génant, mais lorsque ça sera utilisé par des vrais gens, ça m'étonnerait que ça leur plaise de perdre leur préférences à chaque nouvelle release...
    Lorsque tu rebuild, le fichier qui est dan bin.debug (ou release) est écrasé par celui avec les valeurs par défaut.
    Lorsque les gens utiliseront ton appli, cela ne posera pas de problème car il n'y aura pas de recompilation donc pas de remplacement de fichier

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut
    Ah bon ben c'est cool.

    Cela m'amène à poser une autre question, toujours sur les settings. J'aimerai sauvegarder une collection dont la classe est définie dans mon namespace. Dans l'éditeur graphique (Settings.settings), le namespace de mon projet ne figurait pas. J'ai donc mis ma classe en dur dans le code.

    Le problème, c'est qu'en relançant mon appli, la collection existe bien dans les settings, mais ne contient plus rien ! Alors qu'au moment de sauvegarder, des objets étaient présents dedans.

    Comment faire ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 101
    Par défaut
    En fait il faut que la classe aie les méthodes ToString et FromString. Je vais continuer à investiguer de ce côté là...

Discussions similaires

  1. Perdu dans mes compilation setting
    Par houam3012 dans le forum Langage
    Réponses: 2
    Dernier message: 04/05/2007, 11h57
  2. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  3. Connection perdue ...
    Par rgarnier dans le forum XMLRAD
    Réponses: 5
    Dernier message: 25/04/2003, 16h42
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo