ConfigSource не работает в system.serviceModel * или * его подразделах
Я пытаюсь разбить файл app.config на несколько файлов, чтобы упростить управление различиями, необходимыми для разных сред. С некоторыми разделами было легко...
<system.diagnostics>
various stuff
</system.diagnostics>
стал
<system.diagnostics configSource="ConfigFiles\system.diagnostics.dev" />
с "различным материалом", перемещенным в файл system.diagnostics.dev.
Но для раздела system.serviceModel
это, похоже, не работает.
Теперь я прочитал предложения о том, что он не работает для system.serviceModel
сам, но он работает для разделов под ним: bindings
, client
, diagnostics
и т.д. Но то же самое происходит с мне, когда я пытаюсь использовать configSource с одним из них. Когда я помещаю
<system.serviceModel>
<bindings configSource="ConfigFiles\whateverFile.dev" />
Я получаю:
Атрибут 'configSource' не объявлен.
Кто-нибудь еще видел это? Знаете ли вы решение? (Возможно, у меня устаревшая схема или что-то еще?)
Ответы
Ответ 1
Редактор VS.NET стонет о конфигурации, но он работает.
У меня такая конфигурация...
<system.serviceModel>
<behaviors configSource="config\system.servicemodel.behaviors.config" />
<bindings configSource="config\system.servicemodel.bindings.config" />
<client configSource="config\system.servicemodel.client.config" />
</system.serviceModel>
... который отлично работает.
Ответ 2
Он будет НЕ работать с <system.serviceModel>
, так как конфигурация SectionGroup - не раздел конфигурации.
Он WILL работает нормально во время выполнения на чем-либо ниже <system.serviceModel>
- мы делаем это все время. Ответ Мартина показывает это хорошо - его образец будет работать.
Ответ 3
Одна вещь, о которой нужно знать при перемещении разделов конфигурации в отдельные файлы: убедитесь, что ваш отдельный файл конфигурации НЕ содержит атрибут configSource. Например, если вы разделили свой раздел привязок так,
<system.serviceModel>
<bindings configSource="yourConfigFile.config" />
</system.serviceModel>
убедитесь, что ваш фактический файл привязок не содержит атрибут "configSource":
<?xml version="1.0" encoding="utf-8"?>
<bindings>
<!-- binding configuration stuff -->
</bindings>
Я знаю, что это может показаться очевидным, но если вы введете атрибут configSource, затем вырезаете и вставляете в новый файл, легко забыть извлечь атрибут.
Надеюсь, что это поможет.