2008-10-28 61 views
9

默認情況下,.NET應用程序的配置文件以「exe文件名」.config命名。我想知道是否有可能動態地指定一個應用程序的配置。是否可以在運行時爲.NET應用程序切換應用程序配置文件?

例如,構建的應用程序是「foo.exe」。在運行時,配置文件是「foo.exe.config」。是否有可能讓它接受命令行參數來使用其他配置文件。所以,應用程序可以使用其他配置,如下所示。

foo.exe的/config:bar.config

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

回答

0

是的,你需要使用ExeConfigurationFileMap

+0

你可以給一些細節或參考教程? – 2008-10-28 08:57:37

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

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; 
10

得到上述所有工作的好,如果你需要更換隻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"); 
相關問題