configSource не работает в system.serviceModel * или * его подразделах - PullRequest
32 голосов
/ 13 мая 2009

Я пытаюсь разделить файл 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' не объявлен.

Кто-нибудь еще видел это? Вы знаете решение? (Возможно, у меня есть устаревшая схема или что-то в этом роде?)

Ответы [ 3 ]

65 голосов
/ 13 мая 2009

Редактор 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>

... который отлично работает.

24 голосов
/ 13 мая 2009

Он будет НЕ работать на <system.serviceModel>, так как это группа конфигурирования, а не секция конфигурации.

Это БУДЕТ отлично работает во время выполнения для всего, что ниже <system.serviceModel> - мы делаем это все время. Ответ Мартина это хорошо показывает - его образец будет работать.

6 голосов
/ 03 февраля 2010

Следует помнить одну вещь при перемещении разделов конфигурации в отдельные файлы: убедитесь, что ваш отдельный файл конфигурации НЕ содержит атрибут configSource. Например, если вы разделите свой раздел привязок следующим образом,

<system.serviceModel>
    <bindings configSource="yourConfigFile.config" />
</system.serviceModel>

убедитесь, что ваш фактический файл привязок не содержит атрибут "configSource":

<?xml version="1.0" encoding="utf-8"?>
<bindings>
    <!-- binding configuration stuff -->
</bindings>

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...