Search code examples
c#.netapp-config

Using an external .config file in configSource produces error


I was playing around with how to use the Configuration Manager to read/write custom sections in the App.config file for a WPF application in C#. I read this excellent article on .NET 2.0 Configuration Demystified and it helped me a lot in using the config files. Here is the initial App.config file which I wrote and it works fine.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="example" type="CustomConfig.ExampleSection, CustomConfig" />
  </configSections>
  <example version="A sample string value." />
  <appSettings>
    <add key="version_string" value="1.01" />
  </appSettings>
</configuration>

But when I changed the App.config file in such a way that my custom section will be read from an external config file mentioned in configSource, Visual Studio gives me an error

The format of a configSource file must be an element containing the name of the section.

Here are the App.config and example.config files

Changed App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="example" type="CustomConfig.ExampleSection, CustomConfig" />
  </configSections>
  <example configSource="example.config" />
  <appSettings>
    <add key="version_string" value="1.01" />
  </appSettings>
</configuration>

example.config

<?xml version="1.0"?>
<example>
    <add key="version" value="blahblah" />
</example>

Solution

  • Visual Studio's editor/intellisense has a shortcoming in that it complains about the configSource= attribute - but it is absolutely legal, and it does work; I use it every day, in various production systems.

    My recommendation: just try it! :-) Run the code - I'm pretty sure it will work (your configs look OK to me).

    Update: OK - well it seems you're totally changing the style of the <example> tag. In your original app.config you have:

    <example version="A sample string value." />
    

    So of course, your externalized example.config must contain the same values and the same structure:

    <?xml version="1.0"?>
    <example version="A sample string value." />
    

    Can you try with this example.config ??