2008-10-28 2 views
9

Par défaut, le fichier de configuration de l'application .NET porte le nom "exe file name" .config. Je me demande s'il est possible de spécifier dynamiquement la configuration d'une application. Par exemple, l'application construite est "foo.exe". Par exemple, l'application construite est "foo.exe". Au moment de l'exécution, le fichier de configuration est "foo.exe.config". Est-il possible de le faire accepter les arguments de la ligne de commande pour utiliser un autre fichier de configuration. Ainsi, l'application peut utiliser une autre configuration comme ci-dessous.Est-il possible de changer le fichier de configuration de l'application lors de l'exécution de l'application .NET?

foo.exe /config:bar.config

bar.config est utilisé comme fichier de configuration insteand de foo.exe.config.

Répondre

0

Oui, vous aurez besoin d'utiliser ExeConfigurationFileMap

+0

peut vous donner quelques détails ou références aux tutoriels? –

+0

Voici l'exemple et la documentation MSDN http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openmappedexeconfiguration.aspx –

4

code de 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

Gotten de 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

Tous les travaux ci-dessus et si vous devez remplacer la section uniquement AppSettings. Si vous devez exécuter différents fichiers de configuration (toutes les sections), vous pouvez envisager de lancer l'application à l'aide d'un hôte, créer un domaine d'application pour votre application principale et définir différents fichiers de configuration en fonction des paramètres transmis.

Voici le code qui a fonctionné pour moi:

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