2009-06-11 15 views
23

Ho bisogno di aggiornare un'impostazione nel System.net SectionGroup di un file .Net exe app.config in fase di esecuzione. Non ho accesso in scrittura al file di configurazione originale in fase di runtime (sto sviluppando un componente aggiuntivo .Net che è ospitato in un exe fornito dall'app di cui non ho il controllo) quindi speravo di salvarne una copia del file e sostituire la configurazione in exe con la versione modificata in fase di esecuzione. Ho provato quanto segue ma non funziona. Eventuali suggerimenti?Aggiornamento app.config impostazione di system.net in fase di esecuzione

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    NetSectionGroup netSectionGroup = config.GetSectionGroup("system.net") as NetSectionGroup; 
    netSectionGroup.Settings.HttpWebRequest.UseUnsafeHeaderParsing = true;      
    config.SaveAs(@"C:\ProgramData\test.config", ConfigurationSaveMode.Full); 

    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:\ProgramData\test.config"); 

risposta

45

non ho capito dalla tua domanda se non si ha accesso al file app.config a causa della vostra implementazione proprio disegno o semplicemente non erano in grado di salvare il file di configurazione, ecco un pezzo di codice che consente di modificare e salvare la sezione appSettings nel file di configurazione in fase di esecuzione:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
KeyValueConfigurationCollection settings = config.AppSettings.Settings; 

// update SaveBeforeExit 
settings[-keyname-].Value = "newkeyvalue"; 
... 
//save the file 
config.Save(ConfigurationSaveMode.Modified); 
//relaod the section you modified 
ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 

PS il codice non salverà il file app.config che si vede nell'editor soluzione, sarà pdate il "program_name .exe.config "file nell'operazione forlder.

+1

Sto sviluppando un componente aggiuntivo per un'applicazione .Net (Windows Media Center). L'addin assume la forma di un assembly .Net dll che viene caricato in un processo host separato (ehexthost.exe) gestito da Media Center exe (ehshell.exe). Non riesco a salvare il file app.config originale per il processo host a causa della sua posizione, quindi la necessità di salvare su un percorso alternativo. Inoltre voglio apportare una modifica a system.net SectionGroup e AppSettings. Grazie. – mthornal

+0

Posso confermare che funziona anche in .NET 4.0 (Grazie a @AlexDrenea!) La chiave (scusate il gioco di parole) per me era quella di avere le seguenti impostazioni: ' ' – AndrewJacksonZA

+1

Confermato ... Non verrà salvato in modalità di debug. Si salverà solo se si esegue l'exe nella cartella bin. Non ho visto alcuna prova del salvataggio nel file "program_name.exe.config". – bizah

2

con questo codice ho modificato la stringa di connessione nell'impostazione dell'applicazione del file di configurazione ... spero che questo possa aiutarti.

string ConStrng = ConfigurationSettings.AppSettings["ConnectionString"]; 
      string sss = "Data Source="; 
      string xxx = ";Initial Catalog=AlfalahScholarship;Integrated Security=True"; 
      //ConfigurationSettings.AppSetting; 
      System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      //Get the appSettings section. 
      AppSettingsSection appSettings = (AppSettingsSection)config.GetSection("appSettings"); 
      appSettings.Settings.Remove("ConnectionString"); 
      appSettings.Settings.Add("ConnectionString", sss + txtServerName.Text + xxx); 

      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 
4

utilizzando System.Configuration;

public void save_new_connection() 
    { 

     string ConStrng = ConfigurationManager.ConnectionStrings.ToString(); 
     ConnectionStringSettings conSetting = new ConnectionStringSettings(); 

     conSetting.ConnectionString="server=localho;UserId=root;password=mypass;database=night_anglecourier"; 
     conSetting.Name = "courier.Properties.Settings.night_anglecourierConnectionString"; 
     conSetting.ProviderName = "MySql.Data.MySqlClient"; 

     System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

     ConnectionStringsSection conSettings = (ConnectionStringsSection)config.GetSection("connectionStrings"); 
     conSettings.ConnectionStrings.Remove(conSetting); 
     conSettings.ConnectionStrings.Add(conSetting); 

     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection(config.AppSettings.SectionInformation.Name); 


    } 
Problemi correlati