2010-02-09 8 views
6

Mon application asp.net utilise un fichier web.config pour la configuration courante. J'ai également une section qui mappe certains objets de données aux chaînes de connexion, et cette section va être quelques milliers de lignes. Je veux déplacer cette section vers un autre fichier de configuration "dataMappings.config", donc je ne gonfle pas web.config - existe-t-il un mécanisme standard pour accéder à ce fichier de configuration?Lecture des paramètres du fichier de configuration séparé

Merci, Andrey

Répondre

10

Dans chaque section, vous pouvez définir configSource, qui peut pointer vers un chemin de fichier externe. Voici un exemple simple:

<connectionStrings configSource="myConnectionStrings.Config" /> 
<appSettings configSource="myAppSettings.Config" /> 

Assurez-vous de ne pas utiliser .xml extension de fichier, car il peut être visualisé dans un navigateur. .config ne sera pas servi par le serveur web.

Parce que vos sections de configuration sont toujours définies dans le web.config (pointant ainsi à des fichiers externes), vous pouvez accéder à cette information par les voies normales (WebConfigurationManager.AppSettings, WebConfigurationManager.GetSection, ConfigurationManager ou gestionnaires de section personnalisée selon les besoins)

+0

Cela fonctionnera-t-il si j'utilise une section personnalisée? Ou dois-je faire quelque chose dans ce code de section personnalisée pour prendre en charge l'attribut configSource? – Andrey

+0

+1 - Bonne réponse, battez-moi! –

+0

@Andrey: cela fonctionnera avec ** any ** 'ConfigurationSection' dans le framework .NET 2.0 et supérieur. –

1

J'ai utilisé une aide à la configuration dans une DLL partagée et un fichier app.config dans la DLL qui utilise les éléments Settings.Properties.Default en modifiant le projet et en définissant l'onglet des paramètres. Il semble que la valeur ne soit pas lue sauf si vous recompilez, et resynchronisez le fichier app.config (dans la DLL) avec les paramètres du projet.

Cela fonctionne pour moi. Je ne me souviens pas d'où j'ai eu l'inspiration. Je viens d'inclure cette classe dans un projet partagé quelque part. permet à n'importe quelle DLL d'appeler ses propres paramètres, ce qui vous permet de modifier les entrées dllFile.dll.config. Je l'utilise pour les chaînes de connexion. La mise en garde est que dans cette méthode, la chaîne de connexion doit être une chaîne de type, et non la chaîne de connexion spéciale.

using System; 
using System.Configuration; 

namespace Shared 
{ 
    public static class ConfigurationHelper 
    { 
     public static string GetConfigValue(string keyName) 
     { 
      string codebase = System.Reflection.Assembly.GetCallingAssembly().CodeBase; 
      Uri p = new Uri(codebase); 
      string localPath = p.LocalPath.ToLowerInvariant(); 
      string executingFilename = System.IO.Path.GetFileNameWithoutExtension(localPath); 
      string sectionGroupName = "applicationSettings"; 
      string sectionName = executingFilename + ".Properties.Settings"; 
      string configName = localPath + ".config"; 
      ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
      fileMap.ExeConfigFilename = configName; 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
      ConfigurationSectionGroup group = config.GetSectionGroup(sectionGroupName); 
      ClientSettingsSection section = null; 
      foreach (ClientSettingsSection sect in group.Sections) 
      { 
       if (sect.SectionInformation.Name.Equals(sectionName, StringComparison.InvariantCultureIgnoreCase)) 
       { 
        section = sect; 
        break; 
       } 
      } 
      SettingElement elem = section.Settings.Get(keyName); 
      if (elem == null) 
       return ""; 
      else 
       return elem.Value.ValueXml.InnerText.Trim(); 
     } 
    } 
} 

//in DLL 
void foo() 
{ 
    var str = ConfigurationHelper.GetSetting("ConnectionStringProd"); 
} 
Questions connexes