Is it possible to switch application configuration file at runtime for .NET application?

前端 未结 4 1422
一个人的身影
一个人的身影 2020-12-29 13:06

By default, .NET application\'s configuration file is named after \"exe file name\".config. I\'m wondering whether it is possible to have one application\'s configuration sp

相关标签:
4条回答
  • 2020-12-29 13:42

    Gotten from How to use Configuration.GetSection() and ConfigurationManager.OpenMappedExeConfiguration()

    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = @"C:\Inetpub\Test\Config\Dev.config";
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings");
    string ConfigVersion = section.Settings["ConfigVersion"].Value;
    
    0 讨论(0)
  • 2020-12-29 13:44

    All of the above work well if you need to replace only AppSettings section.

    In case you have to run with different config files (all sections) you might want to consider launching application using a host, that creates app domain for your main application and sets different config file depending on parameters you passed in.

    Here's the code that worked for me:

            AppDomainSetup setup = new AppDomainSetup();
            setup.ApplicationBase = "file://" + System.Environment.CurrentDirectory;
            setup.DisallowBindingRedirects = true;
            setup.DisallowCodeDownload = true;
    
            if (args.Length != 0 && args[0].Equals("-test"))
            {
                setup.ConfigurationFile = "PATH_TO_YOUR_TEST_CONFIG_FILE";
            }
            else {
                setup.ConfigurationFile = "PATH_TO_YOUR_LIVE_CONFIG_FILE";
            }
    
            AppDomain domain = AppDomain.CreateDomain("FRIENDLY_NAME", null, setup);
            domain.ExecuteAssembly("YourMainApp.exe");
    
    0 讨论(0)
  • 2020-12-29 13:44

    Yes you will need use ExeConfigurationFileMap

    0 讨论(0)
  • 2020-12-29 13:46

    Code from MSDN

    static void DisplayMappedExeConfigurationFileSections()
    {
        // Get the application configuration file path.
        string exeFilePath = System.IO.Path.Combine(
            Environment.CurrentDirectory, "ConfigurationManager.exe.config");
        // HERE !!!     
        // Map to the application configuration file.
        ExeConfigurationFileMap configFile = new ExeConfigurationFileMap();
        configFile.ExeConfigFilename = exeFilePath;
    
        Configuration config =
            ConfigurationManager.OpenMappedExeConfiguration(configFile,
            ConfigurationUserLevel.None);
    
        // Display the configuration file sections.
        ConfigurationSectionCollection sections = config.Sections;
    
        Console.WriteLine();
        Console.WriteLine("Sections in machine.config:");
    
        // Loop to get the sections machine.config.
        foreach (ConfigurationSection section in sections)
        {
            string name = section.SectionInformation.Name;
            Console.WriteLine("Name: {0}", name);
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题