Подтвердить что ты не робот

Что не так с моим файлом app.config?

У меня есть файл app.config, который выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="TestValue" />
  </appSettings>
  <newSection>
  </newSection>
</configuration>

И я пытаюсь использовать его таким образом:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(@"C:\app.config");  
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap); 

Однако, похоже, он не работает. Когда я ломаю и отлаживаю сразу после чтения файла, и я пытаюсь посмотреть configuration.AppSettings, я получаю 'configuration.AppSettings' threw an exception of type 'System.InvalidCastException'.

Я уверен, что я читаю файл, потому что, когда я смотрю на configuration.Sections [ "newSection" ], я возвращаю пустой {System.Configuration.DefaultSection} (а не null).

Я предполагаю, что у меня есть что-то очень неправильное... что происходит с AppSettings?

4b9b3361

Ответ 1

Вы используете неправильную функцию для чтения app.config. OpenMappedMachineConfiguration предназначен для открытия файла machine.config, но вы открываете типичный файл application.exe.config. Следующий код прочитает ваш app.config и вернет то, что вы ожидаете.

    System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = @"C:\app.config";
    System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    MessageBox.Show(configuration.AppSettings.Settings["TestKey"].Value);

Ответ 2

Я думаю, что элемент 'newSection' вызывает проблему. Если вы не добавите элемент "configSections", чтобы объявить, что такое "newSection",.NET не сможет его использовать.

Вам нужно что-то вроде:

<configSections>
  <section name="newSection" type="Fully.Qualified.TypeName.NewSection,   
  AssemblyName" />
</configSections>

В первом случае я попытаюсь удалить элемент 'newSection', чтобы убедиться, что это улучшает ситуацию.

Эта ссылка объясняет разделы пользовательской конфигурации.

Ответ 3

Если вы прочитали документацию в MSDN о функции, которую вы пытаетесь использовать:

OpenExeConfiguration MSDN

В способе, которым вы его используете, вы попытаетесь найти конфигурацию app.config.exe. Если вы хотите использовать appSettings, добавьте их в конфигурацию конфигурационного файла из вашего приложения, а затем получите доступ к ним с помощью диспетчера конфигурации:

Использование appsetting.net MSDN

Ответ 4

В любое время, когда я использовал ключ в своем webconfig, я сделал это так

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <SectionGroup>
      Section Stuff
    </SectionGroup>
  </configSections>
<appsettings>
   <add key="TestKey" value="TestValue" />
</appSettings>
</configuration>

Я не совсем понимаю, почему, но он всегда бросает на меня ошибки с настройками приложения внутри настроек конфигурации.