2017-08-02 1 views
-1

Dans mon application WPF (C#, .Net Framework 4.5), J'ai besoin de lire un autre fichier de configuration d'applications.Lire le fichier de configuration d'une autre application dans l'application WPF par C#

  var configFileMap = new ExeConfigurationFileMap 
      { 
       ExeConfigFilename = "ChildApp.exe.config" 
      }; 

      // Configuration object 
      Configuration libConfig = 
      ConfigurationManager.OpenMappedExeConfiguration(configFileMap, 
      ConfigurationUserLevel.None); 

      // Get the section 
      section = (libConfig.GetSection("appSettings") as 
         AppSettingsSection); 
      // Getting the value 
      configValue = section.Settings["DBServer"]; 

Mais configValue n'obtient rien car il n'existe aucune valeur dans le dictionnaire Setting. J'ai également essayé en utilisant "userSettings" comme dans le fichier de configuration, le nom de la section est celui.

section = (libConfig.GetSection("userSettings") as 
         AppSettingsSection); 

Dans ce cas, j'obtiens null dans la valeur "section".

Voici mon fichier de configuration

<?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="ChildApp.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" /> 
</startup> 
<userSettings> 
    <ChildApp.Properties.Settings> 
     <setting name="DBServer" serializeAs="String"> 
      <value>MyServer</value> 
     </setting> 
     <setting name="Database" serializeAs="String"> 
      <value>MyDatabase</value> 
     </setting> 
     <setting name="DBUser" serializeAs="String"> 
      <value>sa</value> 
     </setting> 
     <setting name="DBPassword" serializeAs="String"> 
      <value>password123</value> 
     </setting> 
     <setting name="ErrorReportingEmail" serializeAs="String"> 
      <value>[email protected]</value> 
     </setting> 
    </ChildApp.Properties.Settings> 
    </userSettings> 
    </configuration> 

je googlé mais n'a pas pu trouver une solution qui fonctionne. Pourriez-vous m'aider à comprendre ce qui ne va pas. Merci.

Répondre

0

Vous pouvez obtenir les usersettings comme celui-ci: -

var user = (ConfigurationSection)ConfigurationManager.GetSection("userSettings"); 
0
XDocument xdoc = XDocument.Load(@"C:\Users\Administrator\Documents\Visual Studio 2013\Projects\MyProject\MyProject\bin\MyProject.dll.config"); 
      var p = xdoc.Element("configuration").Element("userSettings").Elements(); 
      foreach (XElement item in p) 
      { 
       if(item.FirstAttribute.Value == "DBServer") 
       { 
        string dbserver = item.Value; 
       } 

      } 

Chargez le fichier de configuration dans un XDoc et analyser comme ci-dessus. vous pouvez obtenir n'importe quel champ que vous voulez.

Ici using System.Xml.Linq; doivent être ajoutés.