2010-02-28 17 views
50

Ho alcune domande su due modi per salvare le impostazioni in web.config.appSettings vs applicationSettings. appSettings obsoleti?

appSettings: Cerca in web.config

<appSettings> 
<add key="key1" value="value1"/> 
<add key="key2" value="value2"/> 
</appSettings> 

Utilizzo in code-behind:

ConfigurationManager.AppSettings["key1"]; 

ApplicationSettings/Proprietà (generati automaticamente utilizzando la 'scheda-properties' nel progetto)
Look in web.config

<applicationSettings> 
    <Projectname.Properties.Settings> 
     <setting name="TestEnvironment" serializeAs="String"> 
      <value>True</value> 
     </setting> 
    </Projectname.Properties.Settings> 
</applicationSettings> 

Utilizzo in code-behind:

Properties.Settings.Default.TestEnvironment 

Quindi, qual è la differenza tra questi due stoccaggio possibilità di impostazioni nel web.config?
Per quanto posso vedere, uno svantaggio dell'appSettings è che tu stesso hai modificato il web.config e le appSettings non sono state digitate, dove sono le impostazioni dell'applicazione.

Entrambi sono sostituibili all'interno di un progetto di distribuzione Web.

Per quanto mi riguarda, non è possibile utilizzare per appSettings. Mi sto perdendo qualcosa qui? Qual è il più vecchio storicamente visto?

risposta

22

Questo è stato discusso prima qui: Pros and cons of appSettings vs applicationSettings (.NET app.config).

Come per le vostre domande: il più vecchio è <appSettings>, era circa 2.0, <applicationSettings> disponibile in 2.0.

Vantaggio? Quando sto modificando un valore, o aggiungendo un valore su un server in cui lo strumento migliore è Notepad <applicationSettings> è molto dettagliato, e talvolta I voglio solo una stringa. Forse un esempio stupido, ma quando sto modificando le impostazioni di configurazione tra i livelli per ottenere correttamente la configurazione della distribuzione automatica, è tremendamente utile che sia semplice.

Devo concordare con marc_s dall'altra discussione però, se stai facendo qualcosa che è davvero complesso, probabilmente ti stai avvicinando al punto in cui dovresti avere la tua sezione di configurazione comunque. Dal momento che stai eseguendo la serializzazione nel tuo tipo di configurazione all'avvio ... ottieni lo stesso tipo controllando in questo modo, solo tramite Serializer XML è l'unica differenza.

Questo ha anche il vantaggio di me facendo Config.LDAPServer o forse uno di configurazione per diversi settori di ciascuno, come Security.Config e Themes.Config (indovinare qui!), È possibile ottenere uno schema di denominazione veramente utile/chiaro lì come un beneficio collaterale.

6

Una cosa che ho notato è che i valori AppSettings è possibile fare riferimento tramite <%$ AppSettings: name %> tag in linea nelle pagine aspx, ma sembra che ci sia alcun modo equivalente per accedere ApplicationSettings valori attraverso i tag in linea.

+3

Grazie per queste informazioni! Ho letto su internet per trovare questa risposta. – Germstorm

+0

Grazie per questa risposta. Mi stavo chiedendo perché non posso accedere alle cose memorizzate in ApplicationSettings in una vista usando ASP.NET MVC. – user850010

+0

Sembra che le librerie dll possano accedere alle appSettings del valore-chiave vecchio stile nel file di configurazione principale, ma non le più recenti ApplicationSettings fortemente tipizzate. Se vuoi mantenere tutti i tuoi parametri di configurazione (sia per l'app che per le sue librerie) fortemente digitati e in un unico posto, devi passare le esigenze delle librerie tramite proprietà o costruttori. Se hai una classe di libreria statica, ad es. uno che invia e-mail e ha molti parametri di configurazione, è più facile passarli una volta usando il vecchio blocco appSettings. IMHO ... –

21

Le impostazioni delle applicazioni vengono assegnate ai nomi in modo che due diversi assembly possano avere un'impostazione per "timeout" senza conflitti e ApplicationSettings siano facoltativi poiché il valore predefinito è impostato tramite un attributo sull'impostazione nel codice.

+3

Probabilmente l'unica risposta che indica alcune importanti differenze e ragioni per utilizzare o non utilizzare applicationSettings. –

3

vorrei aggiungere che IIS 8.0 GUI (e versioni precedenti e) non può modificare la sezione <applicationSettings> (è invisibile, cioè sembra come se non parametri possono essere configurati), mentre <appSettings> sono modificabili con IIS 8.0.

Sarebbe stato bello se VS2012/IIS 8.0 avesse utilizzato lo stesso sistema di configurazione della GUI fino in fondo, ma i prodotti non sembrano essere sincronizzati in quell'aspetto. In un modo o nell'altro, potrebbe essere necessario modificare le impostazioni dell'applicazione con il blocco note.

Le stringhe di connessione vengono visualizzati in entrambe le interfacce grafiche, ma se si utilizza <applicationSettings> in IIS includono il percorso completo (Namespace .Properties.Settings. ConnectionStringName).

Problemi correlati