Не могу найти мой файл конфигурации - PullRequest
1 голос
/ 21 января 2012

Мне нужно для чтения / записи в файл конфигурации, не связанные с каким-либо EXE-файла.Я пытаюсь это:

        var appConfiguration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = "SlamDunkSuper.config" }, ConfigurationUserLevel.None);
        if(appConfiguration == null) {

           //Configuration file not found, so throw an exception
           //TODO: thow an exception here
        } else {

           //Have Configuration, so work on the contents
           var fileEnvironment = appConfiguration.GetSection("fileEnvironment");
        }

Не выдается исключение, но fileEnvironment всегда нулевой.Вот содержимое файла:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <configSections>
      <section name="fileEnvironment" type="System.Configuration.NameValueSectionHandler"/>
   </configSections>

   <fileEnvironment>
      <add key="DxStudioLocation" value="123456"/>
   </fileEnvironment>
</configuration>

Кто-нибудь, пожалуйста, выведите меня из пустыни.Я также не знаю, как написать или изменить запись в NameValueCollection после получения содержимого раздела.Спасибо

Ответы [ 2 ]

0 голосов
/ 22 января 2012

Вы можете глобализировать AppSettingsSection с некоторыми незначительными изменениями:

<section name="fileEnvironment" type="System.Configuration.AppSettingsSection"/>

Потребляется с:

        var appConfiguration = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap() { ExeConfigFilename = "SlamDunkSuper.config" }, ConfigurationUserLevel.None);

        if (!appConfiguration.HasFile) // no need to null check, ConfigurationManager.OpenMappedExeConfiguration will always return an object or throw ArgumentException
        {
            //Configuration file not found, so throw an exception
        }
        else
        {
            var section = appConfiguration.GetSection("fileEnvironment") as AppSettingsSection;
            if (section != null)
            {
                var dxStudioLocation = section.Settings["DxStudioLocation"].Value;
            }
        }
0 голосов
/ 21 января 2012

В .net файл конфигурации выбирается запущенным exe-файлом, поэтому, если у вас есть 5 проектов (4 dll и один exe), и у каждого проекта есть свой конфигурационный файл, когда вы запустите свое приложение из exe-файла Загруженные им DLL будут думать, что файл конфигурации exe - это их файл конфигурации.

Другими словами, чтобы прочитать файл конфигурации проекта dll, вам нужно открыть его явно, используя его путь.

надеюсь, это поможет

...