是否可以在运行时为.NET应用程序切换应用程序配置文件?

默认情况下,.NET应用程序的配置文件以“exe文件名”.config命名。 我想知道是否可以动态指定一个应用程序的配置。

例如,构建的应用程序是“foo.exe”。 在运行时,配置文件是“foo.exe.config”。 是否可以让它接受命令行参数来使用其他配置文件。 因此,应用程序可以使用下面的其他配置。

foo.exe /config:bar.config

bar.config用作foo.exe.config的配置文件。

如果您只需要替换AppSettings部分,上述所有工作都可以正常工作。

如果您必须使用不同的配置文件(所有部分)运行,您可能需要考虑使用主机启动应用程序,为主应用程序创建应用程序域,并根据您传入的参数设置不同的配置文件。

这是适合我的代码:

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"); 

来自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); } } 

来自如何使用Configuration.GetSection()和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; 

是的,您需要使用ExeConfigurationFileMap