читання з файлу 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.