none
C# - Classe Settings en dehors de l'application RRS feed

  • Question

  • Bonjour,

    j'utilise la classe Settings pour stocker les dernières informations saisies de l'utilisateur afin de les recharger au prochain lancement.

    J'aurais besoin de pouvoir modifier ces valeurs à partir d'une autre application.

    Est ce que l'on a moyen d'utiliser cette classe avec un emplacement de fichier différent sans avoir à se farcir XML ?

    Merci,

    Vincent

    jeudi 30 avril 2015 16:39

Réponses

  • Bonjour,

    à partir de ce lien, j'ai un élément de réponse :

    http://stackoverflow.com/questions/569117/net-config-files-configsource-outside-the-application-directory-folder

    Sur ma solution, j'ai fait :

    Ajouter -> Element existant -> Choisir le fichier Settings.settings. et changer le bouton 'Ouvrir' par 'Ouvrir en tant que lien'

    Attention, (petit bug ?) lorsque l'on clique sur le fichier de Settings dans le projet que l'on vient d'ajouter, il changer le namespace dans le fichier Settings.Designer.cs par celui du projet  que l'on vient de créer. Je conseille donc de le renommer avec l'ancien nom et d'ajouter dans le nouveau projet la directive using NameSpaceDuPremierProjet.

    Dans le nouveau projet ensuite :

    string test = Settings.Default.App_BarCodeText;
    Console.WriteLine(test);

    Vincent

    vendredi 1 mai 2015 07:46

Toutes les réponses

  • Pour le moment, j'en suis à ce stade :

    string strSource = @"D:\Test.exe.config";
    
    System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(strSource);
    string test = config.AppSettings.Settings["App_BarCodeType"].Value;

    Une exception est levée car Settings ne contient rien et mon fichier XML est bien là.

    Voici le fichier XML :

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
            <configSections>
                    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
                            <section name="BarcodeGenerator.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
                    </sectionGroup>
            </configSections>
            <startup>
                <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
            </startup>
            <userSettings>
                    <BarcodeGenerator.Properties.Settings>
                            <setting name="App_BarCodeType" serializeAs="String">
                                    <value>EAN128</value>
                            </setting>
                    </BarcodeGenerator.Properties.Settings>
            </userSettings>
    </configuration>
    


    jeudi 30 avril 2015 20:14
  • Bonjour,

    Malheureusement dans votre cas je ne crois pas que se soit possible sans manipuler le XML directement.

    En fait ConfigurationManager utilise l'environnement en cours, notamment l'espace de nom de l'application qui s'exécute. A partir du moment où vous utilisez une autre application elle n'a pas le même espace de nom, donc les informations ne seront liée.

    Le seul moyen éventuellement (a tester) serait d'utiliser "appSettings" dans le fichier de configuration.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      ...
      <appSettings>
        <add key="Setting" value="Value"/>
      </appSettings>
      ...
    </configuration>

    De sur ça fonctionne pour la lecture, je ne sais pas pour l'écriture.

    Autre point ConfigurationManager.OpenExeConfiguration() attends le nom du fichier exécutable pas celui de son fichier de configuration.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    vendredi 1 mai 2015 05:47
  • Bonjour,

    à partir de ce lien, j'ai un élément de réponse :

    http://stackoverflow.com/questions/569117/net-config-files-configsource-outside-the-application-directory-folder

    Sur ma solution, j'ai fait :

    Ajouter -> Element existant -> Choisir le fichier Settings.settings. et changer le bouton 'Ouvrir' par 'Ouvrir en tant que lien'

    Attention, (petit bug ?) lorsque l'on clique sur le fichier de Settings dans le projet que l'on vient d'ajouter, il changer le namespace dans le fichier Settings.Designer.cs par celui du projet  que l'on vient de créer. Je conseille donc de le renommer avec l'ancien nom et d'ajouter dans le nouveau projet la directive using NameSpaceDuPremierProjet.

    Dans le nouveau projet ensuite :

    string test = Settings.Default.App_BarCodeText;
    Console.WriteLine(test);

    Vincent

    vendredi 1 mai 2015 07:46
  • Bonne nouvelle.

    Merci pour la solution.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    vendredi 1 mai 2015 07:53