читання з файлу app.config


131

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

ConfigurationSettings.AppSettings["StartingMonthColumn"]

але він повертає нуль, також 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>

Ви намагаєтеся запустити додаток із папки \ bin \ debug, змінюючи файл конфігурації в корені проекту? В іншому випадку змініть конфігурацію та відновіть код після запуску очищення.
— Кангкан

1
Файл не названий "app.config" правда? Це визначено у вашому проекті напевно, але у каталозі виводу додатків він повинен бути названий тим самим, що і ваш вихідний бінарний + ".config" (так, як "MyLibrary.dll.config" або "MyProgram.exe.config" "і т. д. ...)
— BrainSlugs83

@ BrianSlugs83 дякую приятелю, мені було цікаво, чому мій додаток виходить з ладу. Тепер, після двох днів пошуків скрізь, відповідь тут у коментарі. У мене просто було "app.config" і не "MyProgram.exe.config".
— śmiglidigli

Будь ласка, подивіться на stackoverflow.com/questions/1189364/… для вирішення. Спасибі
— Ariful Islam

Відповіді:


171

Конфігурація Налаштування .AppSettings є застарілим , слід використовувати Configuration Manager , .AppSettings замість (вам потрібно буде додати посилання на System.Configuration )

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

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


2
Якщо ConfigurationSettings.AppSettings ["StartingMonthColumn"] поверне нульовий чи порожній рядок, я підозрюю, що Int32.Parse видасть виняток при спробі розбору цих значень.
— Bittercoder

@bittercoder, так, але все-таки ваш файл app.config завжди повинен мати правильну конфігурацію. Якщо ОП хоче додати туди якусь форму поводження, тобто TryParse, то всіма силами вони зможуть. Однак це не було питанням.
— Джеймс

2
Зауважте, що ви також можете отримати доступ до сильно набраних версій значень також через Settings.Default. * (Тобто в цьому випадку це буде Settings.Default.StartingMonthColumn).
— BrainSlugs83

@ BrainSlugs83 Зауважте, що ви плутаєте налаштування користувача з налаштуваннями програми. Якщо ви хочете сильно набрати доступ до налаштувань програми, вам знадобиться впровадити спеціальний ConfigurationSection
— James

Це невірно, він буде виводити значення з app.config незалежно від того, чи відносяться значення до "Користувач" або "Застосування" (від дизайнера графічного інтерфейсу ви можете вибрати область для кожного параметра).
— BrainSlugs83

20

Просто для подальшої довідки вам просто потрібно додати System.Configurationдо своєї бібліотеки посилань:

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


2
Ваша відповідь краще, ніж перша відповідь тут, всі забули сказати, що вам потрібно додати посилання
— essanousy

19

ConfigurationSettings.AppSettings застаріле , дивіться тут:

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

Але це все ще має працювати.

Просто пропозиція, але чи підтвердили ви, що ваша програма виконує конфігурацію програми?

Спробуйте приєднати налагоджувач і перевірте наступне значення:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

А потім відкрити файл конфігурації та перевірити розділ, як ви очікували.


Привіт Bittercoder, коли я намагаюся отримати значення для AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, я отримую C: \\ програмні файли \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config, який не є моїм конфігураційним файлом ... що слід я роблю
— Сатіш

Це правильний файл конфігурації ... можливо, ви просто не очікували цього. Насправді в цьому випадку я вважаю, що C: \ програмні файли \ Microsoft Office \ OFFICE11 \ Excel.EXE.config - це глобальна конфігурація, і якщо ви розмістите аналогічне ім'я Excel.EXE.config в тому самому каталозі, що і ваша колекція, це звідки будуть читатися налаштування вашої програми. Дивіться ці посилання для деталей: dotnet247.com/247reference/msgs/56/281797.aspx stackoverflow.com/questions/2288575 / ...
— Bittercoder


7

Це:

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

добре працює для мене.

Зауважте, що ConfigurationManagerвін знаходиться в System.Configurationпросторі імен (тому ви, швидше за все, хочете using System.Configuration;заяву), і оскільки те, що ви читаєте, має тип рядка, вам потрібно буде проаналізувати те, що ви прочитали, щоб використовувати його як число.

Крім того, переконайтеся, що ви вказали system.configuration.dllяк орієнтир у своєму проекті або сценарії збірки.


яка посилання, яку слід додати, щоб отримати ConfigurationManager.Appsettings, я використовую .Net 2.0 Framework
— Sathish

1
Вам потрібна посилання на System.Configuration.dll. ConfigurationManagerКлас був доданий в .NET 2.0, так що ви повинні бути в порядку.
— Майкл Берр

7

Причина проста: ваш заклик до ConfigurationSettings.AppSettingsне повертає потрібний файл конфігурації. Спробуйте будь-який із наступних способів:

  • Переконайтеся, що ваш конфігурація додатка має те саме ім’я, що і файл EXE програми - із доданим розширенням .config, наприклад MyApp.exe.config
  • АБО ви можете використовувати ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location).AppSettings["StartingMonthColumn"]

Сподіваюся, це допомагає


3

Спробуйте відновити свій проект - він копіює вміст App.config"<YourProjectName.exe> ​​.config" в бібліотеці збірок.


2

Також додайте ключ "StartingMonthColumn" в App.config, з якого запускаєте додаток, наприклад, в App.config тестового проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.