2012-03-06 10 views
7

quello che sto cercando di fare è per il mio file App.config ho un sacco di impostazioni, e quello che voglio fare dividere il mio file di configurazione in file diversi. Per esempio; il mio file app.config ha impostazioni relative alle e-mail, quindi voglio prendere quelle impostazioni e archiviarle in un file email.config e poi nel mio file app.config usare l'attributo configSource per aggiungere le impostazioni da email.config file e aggiungilo al nodo delle impostazioni dell'app. È possibile?Come avere diverse parti del file di configurazione in C#

Se sì, si prega di consigli su come raggiungere il risultato di cui sopra.

Molte grazie.

così per esempio ho un altro file di configurazione chiamato app1.config e ha il seguente codice XML:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings > 
    <add key="l" value="test"/> 
    </appSettings> 
</configuration> 

e poi dal mio file app.config principale avere un riferimento al file app1.config e poi da il codice in grado di fare questo per ottenere il valore del app impostazione chiave:

var x = ConfigurationManager.AppSettings["l"]; 

risposta

6

EDIT per riflettere domanda mutata e commenti aggiuntivi :

Per le impostazioni personalizzate definite nella parte <appSettings> del file di configurazione non è un attributo file che può contenere il percorso di un file che sostituisce i parametri AppSettings: http://www.codeproject.com/Articles/8818/Using-the-File-attribute-of-the-appSettings-elemen

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<appSettings file="settings.config"> 
</appSettings> 
</configuration>` 

È possibile infatti anche utilizzare l'attributo configSource, come specificato nella documentazione di MSDN:

http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource.aspx

la proprietà configSource rappresenta il valore dell'attributo configSource specificato per un oggetto ConfigurationSection associato l'oggetto SectionInformation.

Un'implementazione ConfigurationSection può facoltativamente specificare un file separato in cui sono definite le impostazioni di configurazione per tale sezione. Ciò può essere utile in diversi modi:

L'utilizzo dei file di inclusione può determinare una struttura più logica e modulare per i file di configurazione.

La sicurezza e le autorizzazioni di accesso ai file possono essere utilizzate per limitare l'accesso alle sezioni delle impostazioni di configurazione.

Le impostazioni in un file di inclusione che non vengono utilizzate durante l'inizializzazione dell'applicazione possono essere modificate e ricaricate senza richiedere il riavvio dell'applicazione.

L'esempio seguente mostra come questo attributo viene utilizzato in un file di configurazione per specificare che la sezione di pagine è definita in un esterno file di inclusione:

<pages configSource="pages.config"/>

Oppure, se si desidera memorizzare informazioni dalla stessa sezione in file separati, è sempre possibile ripristinare l'utilizzo di ConfigurationManager.Open ... Funzioni di configurazione e leggere le impostazioni a livello di codice: http://msdn.microsoft.com/en-us/library/ms134262.aspx

+0

Ciao grazie per questo, ho provato questo, ma non ho ottenuto il valore, è tornato come null. Ecco il mio file di configurazione esterno chiamato App1.config, e contiene solo: e il mio principali configurazioni sezione impostazioni dell'applicazione che sembra così: e sul mio codice dietro sto facendo questo: var x = ConfigurationManager.AppSettings [" d "]; ma sta diventando nullo e non il valore. Si prega di assistere. è anticipato – johnnie

+0

Ok grazie molte per questo ha funzionato! :) Ma posso specificare più file di configurazione esterni? In caso affermativo, potresti consigliarti come ottenerlo? Grazie in anticipo. – johnnie

+0

Ho appena provato di nuovo e funziona per me, sei sicuro che il file App1.config sia a posto (stessa directory del programma)? Ad esempio, per un programma di console questo significa che è necessario impostare l'opzione "Copia su directory di output" su "Copia sempre" – Dirk

4

È possibile utilizzare il costruito in sezione di configurazione per smtp settings in un file a sé stante:

<system.net> 
    <mailSettings> 
     <smtp deliveryMethod="network"> 
     <network 
      host="localhost" 
      port="25" 
      defaultCredentials="true" 
     /> 
     </smtp> 
    </mailSettings> 
</system.net> 

Questo può essere referenziato nel app.config utilizzando configSource.

È possibile limitare questo alla sezione smtp da solo, se si vuole:

<system.net> 
    <mailSettings> 
     <smtp configSource="smtp.config" /> 
    </mailSettings> 
</system.net> 
+0

Grazie per questo, ma l'e-mail era solo un esempio. Ho bisogno di dividerlo per qualcosa e quindi basta fare riferimento dal file app.config. – johnnie

+0

@johnnie - Se le impostazioni sono definite in una sezione di configurazione, puoi farlo. In caso contrario, puoi sempre scrivere le tue sezioni di configurazione per il tuo particolare utilizzo e usarle. Questo non è difficile, come descritto in [questo articolo MSDN] (http://msdn.microsoft.com/en-us/library/2tw134k3.aspx). – Oded

0

si possa fare ciò utilizzando l'attributo configSource:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<connectionStrings configSource="cs.config" /> 
</configuration> 
0

ConfigSource esegue il mapping di un ente sezione su un file esterno. Una volta aggiunto, non è più possibile utilizzare la sezione nel file di configurazione di root. né puoi avere più di una mappatura per sezione.

È possibile creare una sezione di configurazione personalizzata, come suggerito sopra, con le sezioni che si desidera mappare & quindi mappare ciascuna sezione a turno.

web.config:

<myConfig> 
    <mysection1 file="section1.config"/> 
    <mysection2 file="section2.config"/> 
</myConfig> 

section1.config:

<mysection1> 
    <add key="key1" value="val1"/> 
</mysection1> 
Problemi correlati