2010-06-22 4 views
3

Je souhaite ajouter une capacité à une application que je développe pour accéder à la configuration. L'application recherche par défaut dans le fichier app.config pour une section que je lui donne. Si elle n'a pas été trouvé dans le app.config, il va chercher dans la base de données, dans un tableau spécifique qui a les colonnes suivantes:Chargement d'une section personnalisée à partir de XML

SectionType, SectionName, SectionData 

La colonne SectionData est une colonne de texte, qui contient les données de la section au format XML (exactement comme il se doit dans le fichier app.config) Je peux prendre le contenu SectionData, mais je ne peux pas le charger dans la ConfigurationSection personnalisée, comme je l'aurais fait si c'était dans l'application fichier .config:

var mySectionObj = ConfigurationManager.GetSection("myCustomSection"); 

Pour simplifier, ma question est en fait comment puis-je la Conf personnalisée Objet igurationSection d'une chaîne XML au lieu d'un fichier de configuration?

+0

duplication possible de [Section Config personnalisée dans App.config C#] (http://stackoverflow.com/questions/12877484/custom-config-section-in-app-config-c-sharp) – IAbstract

+0

également possible dupes: http://stackoverflow.com/questions/2718095/custom-app-config-section-with-a-simple-list-of-add-elements http://stackoverflow.com/questions/4436308/app-config- custom-configuration-section-probleme – IAbstract

Répondre

0

Vous pouvez charger la chaîne dans un objet XDocument et la lire à partir de là.

-1

Je ne pense pas que ce soit possible du tout - avec la classe ConfigurationManager de .NET, il est impossible, autant que je sache, d'ouvrir le fichier que vous voulez - vous êtes limité au fichier app.config. Lire des données de configuration d'une autre source qu'un fichier? Ne peut faire.

Vous pouvez analyser vous-même la chaîne XML (avec "XmlDocument.LoadXml (chaîne)") ou vous pouvez modifier le fichier app.config et le relire.

La question serait: Pourquoi n'y aurait-il pas la CustomSection dans le fichier de configuration? Cela devrait-il être considéré comme une erreur (alors la mise à jour du fichier de configuration serait la meilleure, je pense). Ou est-il prévu que certains fichiers de configuration n'aient pas la CustomSection?

Si les paramètres peuvent être dans le Fichier XML, en ajoutant le paramètre au fichier serait comme ceci:

XmlDocument appconfig = new XmlDocument(); 

appconfig.Load("[config_filename]"); 
XmlNode root = appconfig.DocumentElement; 

XmlDocument mysection = new XmlDocument(); 
mysection.LoadXml([SectionData]); 
XmlNode customSection = mysection.DocumentElement; 

XmlNode tempNode = appconfig.ImportNode(customSection, true); 
root.AppendChild(tempNode); 

appconfig.Save("[config_filename]"); 

... 

var mySectionObj = ConfigurationManager.GetSection("myCustomSection"); 

si ce n'est pas souhaitable, je vois deux possibilités: Première: Do it néanmoins: Modifiez le fichier .config, lisez-le, puis modifiez-le. (ou copier le fichier, modifier l'original, le lire, le supprimer, renommer la copie au nom d'origine). Ce chemin n'est pas sympa, c'est en quelque sorte impur, à mon avis, mais il a de grands avantages: ça marche et c'est facile à entretenir.

Deuxième: Chargez votre chaîne XML dans un XmlDocument: XmlDocument.LoadXml (xmlString) ensuite analyser XmlDocument, avec "doc.ChildNodes" ou "doc.SelectNodes (XPath)" ou « doc.SelectSingleNode (XPath) ". Ce sera beaucoup plus de travail, d'autant plus que vous devrez maintenir des routines pour obtenir les paramètres de configuration dans votre projet, donc je ne recommanderais pas cette méthode. Fortement pas recommandé.

+0

1) C'est facile à faire (voir dupes possibles); 2) 'XDocument' est préférable à' XmlDocument' pour employer Linq2Xml – IAbstract

Questions connexes