чтение из файла 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 02

Пожалуйста, посмотрите 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"] возвращает null или пустую строку, я подозреваю, что Int32.Parse выдаст исключение при попытке проанализировать эти значения.
— Bittercoder 08

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

2
Обратите внимание, что вы также можете получить доступ к версиям значений со строгой типизацией через Settings.Default. * (То есть в данном случае это будет Settings.Default.StartingMonthColumn).
— BrainSlugs83

@ BrainSlugs83 Обратите внимание, что вы путаете пользовательские настройки с настройками приложения. Если вы хотите получить строго типизированный доступ к настройкам приложения, вам необходимо реализовать настраиваемый ConfigurationSection
— Джеймс,

Это неверно, значения будут извлечены из 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: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config, который не является моим файлом конфигурации ... что должно я делаю
— Sathish 08

Это правильный файл конфигурации ... может быть, вы просто этого не ожидали. Фактически, в этом случае я считаю, что C: \ Program Files \ 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.