Конструктор разделов конфигурации .NET - Где моя коллекция? - PullRequest
2 голосов
/ 10 апреля 2009

Я использую Конструктор разделов конфигурации для .NET для создания простого ConfigurationElementCollection. кажется , что все строится просто отлично, и код генерируется автоматически, так как подэлементы видны с Intellisense.

К сожалению, хотя я добавил элементы в коллекцию в разделе конфигурации, они не существуют во время выполнения; он показывает, что свойство Length коллекции равно 0, т. е. коллекция пуста, хотя, как вы можете видеть в моем примере XML, я четко поместил их там:

Пример конфигурации

<logParserSettings xmlns="LogParser">
  <domainControllers>
    <domainController ID="0" name="Local" serverType="Local" enabled="true"/>
    <domainController ID="1" name="DC1" serverType="WindowsServer2003" enabled="false" />
    <domainController ID="2" name="DC2" serverType="WindowsServer2008" enabled="false" />
  </domainControllers>
</logParserSettings>

Разное

  • В конструкторе все, что у меня есть, это то, что вы видите здесь, ConfigurationSection, ConfigurationElementCollection и ConfigurationElement - нет дополнительных элементов конфигурации / разделов / групп
  • Я не добавляю и не удаляю ничего во время выполнения
  • Я пытался как сгенерировать, так и не сгенерировать свойство Singleton, но ни одноэлементный экземпляр, ни экземпляр класса настроек, похоже, не работают
  • Для атрибута ID свойство Is Key имеет значение true, а все остальные атрибуты помечены как true для Is Required

Кто-нибудь когда-нибудь сталкивался с этим? Если да, какие изменения я должен внести, чтобы заставить это работать как задумано?

1 Ответ

8 голосов
/ 10 апреля 2009

Что ж, я сильно усложнил истинную проблему, указав проблему для конкретного элемента, когда оказалось, что даже простой тестовый атрибут на ConfigurationSection не вернул бы ожидаемое значение. Я также понял, что не могу получить доступ к AppSettings, что привело к разгульной подсказке.

Конечная причина? Проект был скомпилирован как библиотека классов. Файлы конфигурации доступны только на уровне приложения . Поскольку я использовал NUnit для запуска тестов, файл конфигурации из тестового проекта переопределял файл разработки для библиотеки классов. Это, вероятно, очевидно для любого разработчика, который не застрял в ASP.NET.

Путем добавления следующего configSection к app.config в тестовом проекте:

<section name="customConfigSection" type="ClassLibraryNamespace.SettingsClass, ClassLibraryNamespace"/>

и заполнив соответствующий раздел, к данным можно получить доступ, как и ожидалось.

Надеюсь, это сэкономит кому-то часы отладки.

...