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

9
默认情况下,.NET应用程序的配置文件以“exe文件名”.config命名。我想知道是否可以动态指定一个应用程序的配置。
例如,构建的应用程序是“foo.exe”。在运行时,配置文件是“foo.exe.config”。是否可以接受命令行参数来使用其他配置文件。因此,应用程序可以像下面这样使用其他配置。
foo.exe /config:bar.config
bar.config将被用作配置文件,而不是foo.exe.config。
4个回答

11

如果你只需要替换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");

4

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

}

3

如何使用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;

0

是的,你需要使用ExeConfigurationFileMap


1
你能提供一些详细的信息或教程参考吗? - Morgan Cheng
这里是MSDN的示例和文档http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.openmappedexeconfiguration.aspx - Will Dieterich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接