Чтение из файла app.config

Я пытаюсь прочитать StartMonthColumn и CategoryHeadingColumn из приведенного ниже файла app.config с помощью кода

ConfigurationSettings.AppSettings["StartingMonthColumn"]

но он возвращает null, также ConfigurationSettings.AppSettings.Count возвращает ноль

Пожалуйста, помогите мне прочитать это в приложении для Windows

<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CTARepository.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <CTARepository.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value />
            </setting>
        </CTARepository.Properties.Settings>
    </userSettings>
    <appSettings>
        <add key="StartingMonthColumn" value="7"/>
        <add key="CategoryHeadingColumn" value="1"/>
    </appSettings>
</configuration>

Ответ 1

ConfigurationSettings.AppSettings устарел, вы должны использовать ConfigurationManager.AppSettings вместо этого (вам нужно будет добавить ссылку на System.Configuration)

int value = Int32.Parse(ConfigurationManager.AppSettings["StartingMonthColumn"]);

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

Ответ 2

ConfigurationSettings.AppSettings устарел, см. здесь:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationsettings.appsettings.aspx

Тем не менее, он все равно должен работать.

Просто предложение, но подтвердили ли вы, что ваша конфигурация приложения является той, которую использует ваш исполняемый файл?

Попробуйте установить отладчик и проверите следующее значение:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

И затем открытие файла конфигурации и проверка раздела там, как вы ожидали.

Ответ 4

Для справки в будущем вам просто нужно добавить System.Configuration в свою библиотеку ссылок:

введите описание изображения здесь

Ответ 5

Это:

Console.WriteLine( "StartingMonthColumn is {0}", ConfigurationManager.AppSettings["StartingMonthColumn"]);

отлично работает для меня.

Обратите внимание, что ConfigurationManager находится в пространстве имен System.Configuration (так что вам, скорее всего, понадобится инструкция using System.Configuration;), и что, поскольку то, что вы читаете, имеет тип строки, вам нужно проанализировать то, что вы читаете в использовать его как число.

Кроме того, убедитесь, что вы установили system.configuration.dll в качестве ссылки в своем проекте или создали script.

Ответ 6

Причина проста, ваш вызов ConfigurationSettings.AppSettings не возвращает требуемый файл конфигурации. Попробуйте использовать один из следующих способов:

  • Убедитесь, что ваш конфигуратор приложения имеет то же имя, что и ваш exe файл приложения - с добавлением расширения .config, например MyApp.exe.config
  • ИЛИ вы можете использовать ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

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

Ответ 7

Попробуйте перестроить свой проект. Он копирует содержимое App.config в "< YourProjectName.exe > .config" в библиотеке сборки.

Ответ 8

Также добавьте ключ "StartingMonthColumn" в App.config, из которого вы запускаете приложение, например, в App.config тестового проекта.