2012-11-08 3 views
4

J'utilise .NET 4.0 et je voudrais utiliser le fichier app.config pour stocker les mêmes paramètres. Je fais ce qui suit. J'utilise l'onglet Settings dans les propriétés du projet pour créer mes paramètres.C# applicationSettings: comment mettre à jour app.config?

Ce module les informations contenues dans le fichier app.config comme ceci:

<MyApp.Properties.Settings> 
     <setting name="param1" serializeAs="String"> 
     <value>True</value> 
     </setting> 
<MyApp.Properties.Settings> 

Dans mon modèle de vue (dans mon code) je peux accéder à l'information de cette façon:

bool myBool = MyApp.Properties.Default.param1; 

Quand je essayer de changer la valeur dans le fichier de configuration, j'essaie ceci:

Properties.Settings.Default.param1 = false; 

une erreur, que param1 est en lecture seule.

Alors, comment puis-je mettre à jour mon fichier de configuration à partir de mon code?

+1

Peut être essayer ceci: http://stackoverflow.com/questions/1357240/change-the-value-in-app-config-file-dynamicallay –

+0

Dans cette solution, ils utilisent config.AppSettings. AppSettings n'est pas obsolète? Je voudrais utiliser ApplicationSettings, parce que cette utilisation a utilisé des paramètres. –

+0

édité ma réponse avec EDIT2 donnant un lien vers une réponse qui lie à un code qui pourrait être votre solution :) –

Répondre

3

Eh bien, j'ai lu le lien de Hari Gillala, dans lequel un utilisateur a suggéré de modifier directement le fichier app.config, c'est-à-dire un fichier xml. Donc, dans les propriétés du projet -> paramètres, je crée les paramètres dont j'ai besoin.Ensuite, pour charger un paramètre dans le code que je fais ce qui suit:

_myViewModelProperty = MyApp.Properties.Settings.Default.MyParam1; 

De cette façon, je peux lire facilement les informations du paramètre de configuration. Est typé, donc en temps de disign je peux voir si l'asign est correct ou pas.

Pour mettre à jour le fichier de configuration, je modifie le fichier app.config avec les bibliothèques xml de .NET. De cette manière, je crée un document xml (variable xml) et charge les informations du fichier app.config. Ensuite, je recherche le nœud que je veux mettre à jour, mettre à jour ses informations (propriété InnerText) et enfin enregistrer les modifications.

De cette façon, je peux mettre à jour le app.config. C'est ce que je veux, car dans une application portable, un seul utilisateur va l'utiliser, et je veux que la configuration soit appliquée sur n'importe quel ordinateur sur lequel je lance l'application.

2

Vous devez utiliser Properties.Settings pour effectuer cette action. Vous pouvez consulter ce documentation pour plus d'informations.

//modify 
Properties.Settings.Default.param1 = false; 
//save the setting 
Properties.Settings.Default.Save(); 

EDIT après discussion en commentaires et d'autres recherches:

Ma suggestion pour obtenir le résultat souhaité serait de passer à AppSettings. En effet, après quelques recherches, j'ai découvert que appsettings modifie le fichier .config dans le dossier Application Data (l'exécution de certains tests sur ma machine le confirme). Voir le commentaire dans la réponse à this question. Je ne suis pas sûr s'il y a un certain travail, mais si vous voulez que votre application ait un fichier app.config portatif, je pense que le seul moyen est de passer à AppSettings qui je suis sûr que vous pouvez enregistrer les modifications dans le fichier app.config trouvé dans le dossier du programme.

EDIT 2: Solution possible

J'ai trouvé une solution pour rendre votre application portable! Vous pouvez modifier le fournisseur utilisé par les paramètres pour enregistrer les paramètres de l'application en créant un fournisseur personnalisé.

La réponse à this question fournit un lien vers un code pour rendre les applicationsapplicables. Je pense que vous l'essayez

+1

Eh bien, vraiment j'utilise de cette façon, Properties.Settings.Default, mais j'écris mal mon code. De cette façon est comment je reçois l'erreur. –

+0

Je pense que la portée de votre paramètre est Application, vous devez le modifier à l'utilisateur pour pouvoir le modifier à l'exécution –

+0

Dans le app.config vous pouvez le faire en déplaçant le paramètre de ... section à la section , ou en utilisant l'interface graphique il y a une zone de liste déroulante Scope dans la configuration des paramètres –

9

Voici ma fonction pour mettre à jour ou ajouter une entrée dans le app.config pour la section "applicationSettings". Il pourrait y avoir un meilleur moyen, mais cela fonctionne pour moi. Si quelqu'un peut suggérer une meilleure méthode s'il vous plaît partagez-la, nous chercherons toujours quelque chose de mieux.

static string APPNODE = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Properties.Settings"; 
    static DateTime now = DateTime.Now; 
    Utilities.UpdateConfig(APPNODE, "lastQueryTime", now.ToString()); 

    static public void UpdateConfig(string section, string key, string value) 
    { 
     Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

     ClientSettingsSection applicationSettingsSection = (ClientSettingsSection)config.SectionGroups["applicationSettings"].Sections[section]; 
     SettingElement element = applicationSettingsSection.Settings.Get(key); 

     if (null != element) 
     { 
      applicationSettingsSection.Settings.Remove(element); 
      element.Value.ValueXml.InnerXml = value; 
      applicationSettingsSection.Settings.Add(element); 
     } 
     else 
     { 
      element = new SettingElement(key, SettingsSerializeAs.String); 
      element.Value = new SettingValueElement(); 
      System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); 
      element.Value.ValueXml = doc.CreateElement("value"); 

      element.Value.ValueXml.InnerXml = value; 
      applicationSettingsSection.Settings.Add(element); 
     } 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("applicationSettings");    
    } 
Questions connexes