В моем приложении WPF (C #, .Net Framework 4.5) мне нужно прочитать другой файл конфигурации приложений.

         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"];

Но configValue ничего не получает, потому что в словаре настроек нет такого значения. Я также пробовал использовать "userSettings", как в конфигурационном файле, название раздела таково.

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

В этом случае я получаю нулевое значение в «секции».

Вот мой файл конфигурации

 <?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>helpdesk@mydomain.com</value>
        </setting>
    </ChildApp.Properties.Settings>
    </userSettings>
    </configuration>

Я погуглил, но не нашел подходящего решения. Не могли бы вы помочь мне разобраться, что не так. Спасибо.

1
Metallic Skeleton 2 Авг 2017 в 07:37

2 ответа

Вы можете получить следующие пользовательские настройки: -

var user = (ConfigurationSection)ConfigurationManager.GetSection("userSettings");
0
Koderzzzz 2 Авг 2017 в 08:07
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;
                }

            }

Загрузите файл конфигурации в XDoc и выполните синтаксический анализ, как указано выше. вы можете получить любое поле, какое захотите.

Здесь нужно добавить using System.Xml.Linq;.

0
Abdur Rahim 2 Авг 2017 в 09:14