Что не так с моим файлом 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?
Ответы
Ответ 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>
Я не совсем понимаю, почему, но он всегда бросает на меня ошибки с настройками приложения внутри настроек конфигурации.