Ryan Lundy
Ryan Lundy

Reputation: 210080

configSource doesn't work in system.serviceModel *or* its subsections

I'm trying to split an app.config file into multiple files to make it easier to manage the differences needed for different environments. With some sections it was easy...

<system.diagnostics>
    various stuff
</system.diagnostics>

became

<system.diagnostics configSource="ConfigFiles\system.diagnostics.dev" />

with the "various stuff" moved to the system.diagnostics.dev file.

But for the system.serviceModel section this doesn't seem to work.

Now I've read suggestions that it doesn't work for system.serviceModel itself, but it works for the sections underneath it: bindings, client, diagnostics, etc. But the same thing happens to me when I try to use configSource with one of them. When I put in

<system.serviceModel>
  <bindings configSource="ConfigFiles\whateverFile.dev" />

I get:

The 'configSource' attribute is not declared.

Has anyone else seen this? Do you know a solution? (Perhaps I have an out-of-date schema or something?)

Upvotes: 36

Views: 17032

Answers (3)

Chris
Chris

Reputation: 81

One thing to be aware of when moving your config sections to separate files: make sure your separated config file does NOT contain a configSource attribute. For example, if you split your your bindings section out like so,

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

make sure that your actual bindings file doesn't contain the "configSource" attribute:

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

I know that might seem obvious, but if you enter the configSource attribute, then cut and paste into a new file, it's easy to forget to take the attribute out.

Hope this helps.

Upvotes: 8

Martin Peck
Martin Peck

Reputation: 11544

VS.NET's editor moans about the config, but it works.

I have config like this...

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

... which works fine.

Upvotes: 71

marc_s
marc_s

Reputation: 754230

It will NOT work on <system.serviceModel> since that's a configuration SectionGroup - not a configuration Section.

It WILL work just fine at runtime on anything below <system.serviceModel> - we do this all the time. Martin's answer shows it nicely - his sample will work.

Upvotes: 24

Related Questions