views:

1635

answers:

6

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

+8  A: 

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.

Martin Peck
Yep, you're right. I see now that it complains when editing the config, but when you run the app, it actually works.
Kyralessa
Ah, I see - it does work after all. Hate to say: I said so :-)
marc_s
Martin said so more clearly than you did, marc_s.
Kyralessa
+3  A: 

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.

Marc

marc_s
If it WILL work on anything below <system.serviceModel>, then why DOESN'T IT work on anything below <system.serviceModel>? I've read in a dozen places that it "will" work. But it *doesn't*. Hence the question.
Kyralessa
So what you're really saying is, I'm going to get the error message whether I like it or not, but I should just ignore it and it'll automagically work?
Kyralessa
No, I'm saying there's something odd happening here, since "it works on my machine" :-) What version of .NET are you using?
marc_s
A: 

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.

Martin Peck
A: 

delete delete delete delete

Alhambra Eidos
A: 

Hi misters,

how can I modify endpoint address programatically of app.config file that uses configsource ?? with C#

thanks in advanced.

Alhambra Eidos
A: 

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.

Chris