0

I've two projects: UI (Winforms application) and Core (dll). Each project has to own its config file.

For example:

Core project (settings.config)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="environment" value="development"/>
    </appSettings>
</configuration>

UI project (app.config)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="skin" value="win"/>
    </appSettings>
</configuration>

From Core I read settings.config as:

System.Configuration.ConfigurationFileMap fileMap = new System.Configuration.ConfigurationFileMap("settings.config");
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
string environment = configuration.AppSettings.Settings["environment"].Value;

At this point crashes and dumps me that it's unable to cast System.Configuration.DefaultSection to System.Configuration.AppSettingsSection.

Jordi
  • 20,868
  • 39
  • 149
  • 333
  • 1
    Are you sure you want machine level config? Unless you do something very special and instead just copy config next to DLL during build you'd use Exe level config as shown in http://stackoverflow.com/questions/594298/c-sharp-dll-config-file – Alexei Levenkov Sep 17 '15 at 14:39

1 Answers1

0

I think what you need is this

        ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap()
        {
            ExeConfigFilename = "settings.config"
        };
        var configuration = ConfigurationManager.OpenMappedExeConfiguration(configFileMap,
           ConfigurationUserLevel.None);
        var section = (AppSettingsSection)configuration.GetSection("appSettings");
        string value = section.Settings["environment"].Value;
Subhash Dike
  • 1,836
  • 1
  • 22
  • 37