2010-03-08 3 views
114

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

ConfigurationSettings.AppSettings["StartingMonthColumn"] 

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

Пожалуйста, помогите мне, чтобы прочитать это в моем приложении окна

<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> 
+0

Вы пытаетесь запустить приложение из папки \ Debug \ Bin при изменении файла конфигурации на корень проекта? В противном случае измените конфигурацию и перестройте код после запуска очистки. – Kangkan

+1

Файл не назван "app.config". Его назвали так, что в вашем проекте наверняка, но в каталоге вывода приложения, его следует называть так же, как ваш выходной двоичный + «.config» (так, например, «MyLibrary.dll.config» или «MyProgram.exe.config» »и т. д.) – BrainSlugs83

+0

@ BrianSlugs83 спасибо, я задавался вопросом, почему мое приложение падает. Теперь, после двух дней поиска повсюду, ответ здесь, в комментарии. У меня просто был «app.config» и нет «MyProgram.exe.config». –

ответ

146

ConfigurationSettings.AppSettings является устаревшего, вы должны использовать ConfigurationManager.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

+0

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

+2

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

6

Это:

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

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

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

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

+0

Какая ссылка должна быть добавлена ​​для получения ConfigurationManager.Appsettings я использую .Net 2.0 Framework – Sathish

+1

Вам нужна ссылка на 'System. Configuration.dll'. Класс «ConfigurationManager» был добавлен в .NET 2.0, поэтому вы должны быть в порядке. –

16

ConfigurationSettings.AppSettings является осуждается смотрите здесь:

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

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

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

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

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

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

+0

Привет, Bittercoder Когда я пытаюсь получить значение для AppDomain.CurrentDomain.SetupInformation.ConfigurationFile, я получаю C: \\ Program Files \\ Microsoft Office \\ OFFICE11 \\ exCEL.EXE.config, который не является моим конфигурационным файлом .. Что я должен делать – Sathish

+0

Правильный файл конфигурации ... возможно, вы не ожидали этого. На самом деле в этом случае я считаю, что C: \ Program Files \ Microsoft Office \ OFFICE11 \ Excel.EXE.config является глобальной конфигурацией, и если вы поместите аналогично названный файл Excel.EXE.config в тот же каталог, что и ваша сборка, это где будут считываться настройки вашего приложения. См. Следующие ссылки: http://www.dotnet247.com/247reference/msgs/56/281797.aspx http://stackoverflow.com/questions/2288575/can-i-use-access-the- app-config-from-net-code-when-called-via-com – Bittercoder

6

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

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

Надеется, что это помогает

2

Пытаться восстановить свой проект - он копирует содержание App.config в «<YourProjectName.exe> .config» в библиотеке сборки.

0

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

10

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

enter image description here

+1

ваш ответ лучше первого ответа здесь, все забыли сказать, что вам нужно добавить ссылку – essanousy

Смежные вопросы