Chargement des fichiers de configuration personnalisés

119

Je sais que je peux ouvrir des fichiers de configuration liés à un assemblage avec la ConfigurationManager.OpenExe(exePath)méthode statique , mais je veux juste ouvrir une configuration qui n'est pas liée à un assemblage. Juste un fichier de configuration .NET standard.

Adam
la source

Réponses:

245

les articles postés par Ricky sont très bons, mais malheureusement ils ne répondent pas à votre question.

Pour résoudre votre problème, vous devriez essayer ce morceau de code:

ExeConfigurationFileMap configMap = new ExeConfigurationFileMap();
configMap.ExeConfigFilename = @"d:\test\justAConfigFile.config.whateverYouLikeExtension";
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);

Si vous avez besoin d'accéder à une valeur dans la configuration, vous pouvez utiliser l'opérateur d'index:

config.AppSettings.Settings["test"].Value;
Oliver
la source
1
@Oliver By whateverYouLikeExtension, voulez-vous dire que vous devez avoir quelque chose après config.?
Svish
4
@Oliver J'ai essayé maintenant, et semble fonctionner correctement sans :)
Svish
1
Je l'ai fait, mais lorsque j'accède à ConfigurationManager.ConnectionStrings, j'obtiens toujours les anciennes données. Qu'est-ce que je rate?
MAW74656
1
@ MAW74656: Vous n'êtes pas obligé d'accéder ConfigurationManager.ConnectionStrings. Au lieu de cela, vous devez lire la valeur de l' configobjet renvoyé par la dernière instruction ci-dessus.
Oliver
3
Pour toute autre personne cherchant comment obtenir les appSettings après cette opération: var foo = config.AppSettings.Settings ["test"]. Value;
Roro
8

Le fichier de configuration est juste un fichier XML, vous pouvez l'ouvrir en:

private static XmlDocument loadConfigDocument()
{
    XmlDocument doc = null;
    try
    {
        doc = new XmlDocument();
        doc.Load(getConfigFilePath());
        return doc;
    }
    catch (System.IO.FileNotFoundException e)
    {
        throw new Exception("No configuration file found.", e);
    }
    catch (Exception ex)
    {
        return null;
    }
}

et plus tard en récupérant les valeurs par:

    // retrieve appSettings node

    XmlNode node =  doc.SelectSingleNode("//appSettings");
Otávio Décio
la source
Code inaccessible détecté après throw new Exception("No configuration file found.", e);.
Oybek
Je supprimerai le return null, il ne sera pas vraiment atteint.
Otávio Décio
7
pourquoi utiliser XML quand vous avez de si bonnes classes de la bibliothèque .Net. Je ne suggérerais pas d'utiliser ceci, pauvre en conception. Et ensuite? implémentez une classe de chaîne différente ... considérez ceci.
Yuki
@ OtávioDécio Puis-je ajouter system.diagnostics pour activer le traçage dans un fichier .config personnalisé?
FaizanHussainRabbani
@FaizanRabbani n'est pas sûr du traçage personnalisé, mais selon msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx, vous devriez pouvoir ajouter des diagnostics sur le fichier de configuration.
Otávio Décio