2009-03-26 16 views
14

Le impostazioni di configurazione in 3.5 mi fanno impazzire ... Aiuto! ;)Come ottenere le impostazioni di configurazione da web.config/app.config utilizzando la libreria di classi

Ho una libreria di classi (denominata ADI), che richiede alcune impostazioni di configurazione dal progetto che la utilizza (come connectiontring, posizioni del filesystem ecc.).

Voglio definire queste impostazioni nei miei Windows Form/Progetti Web App.Config o Web.Config, come le altre impostazioni.

Ecco parte del mio app.config per la mia applicazione Windows Form:

<applicationSettings> 
    <PhotoImportRobot.My.MySettings> 
     <setting name="ADIImageRoot" serializeAs="String"> 
     <value>C:\DataTemp\ADI\Original\</value> 
     </setting> 
     <setting name="ADIImageVariantsRoot" serializeAs="String"> 
     <value>C:\DataTemp\ADI\Variants\</value> 
     </setting> 
    </PhotoImportRobot.My.MySettings> 
</applicationSettings> 

Come accedo che dalla mia libreria di classi ??

ho provato questo:

System.Configuration.ConfigurationManager.AppSettings("ADIImageVariantsRoot") 

Cosa fare?

risposta

23

impostazioni Se non sei dopo strutturato, la sezione appSettings richiede solo coppie chiave-valore:

<appSettings> 
    <add key="ADIImageRoot" value="C:\DataTemp\ADI\Original\" /> 
    <add key="ADIImageVariantsRoot" value="C:\DataTemp\ADI\Variants\" /> 
</appSettings> 

Questo vi permetterà di accedere ad essi attraverso il dizionario AppSettings:

ConfigurationManager.AppSettings["ADIImageVariantsRoot"] 

Come ti aspetteresti.

In alternativa, se è necessaria più struttura per la configurazione (ad esempio più di una semplice stringa o una raccolta di impostazioni), è possibile esaminare utilizzando una sezione di configurazione personalizzata, utilizzando uno ConfigurationSection e le relative parti.

+1

Ho deciso di passare all'utilizzo delle vecchie impostazioni - e questo funziona. Ho anche scritto un wrapper per verificare se esiste e lanciare un errore in caso contrario. – Kjensen

+0

Sì, il lancio di un ArgumentNullException è probabilmente la strada da percorrere se non viene fornita. –

2

Sembra che tu stia utilizzando la roba Impostazioni incorporata nello studio visivo. Questo genera una classe wrapper relativa al file, chiamata, nel tuo caso MySettings.

È quindi possibile scrivere qualcosa come MySettings.Instance.ADIImageVariantsRoot. (Se si fa clic su Mostra tutti i file nella casella degli strumenti del progetto, che vi mostrerà il file .settings.cs e si possono vedere tutti i dettagli scabrosi)

+1

OP (e I) vogliono sapere come leggere l'impostazione dalla libreria di classi. – Tuan

+0

@ Blue: Grazie per il commento. In tal caso, spostare il.le impostazioni (e il codice generato seguirà) in detta libreria di classi, ma assicurati di replicare le impostazioni (se presenti) che inseriscono nell'app.config della libreria nell'app.config del tuo exe. (Non c'è un buon modo per farlo sincronizzare automaticamente i valori predefiniti con i progetti esterni) –

2

Aggiungi riferimento System.web; aggiungere spazio nome e utente

using System.Web.Configuration;  

String webConfigValue; 
      webConfigValue = WebConfigurationManager.AppSettings["employeeDB"].ToString(); 

per leggere il valore di configurazione web

<appSettings> 
     <add key="employeeDB" value="Data Source=servername;Initial Catalog=employee;Persist Security Info=True;User ID=userid;Password=password;"/>   
</appSettings> 
1

per ApplicationSettings si dovrebbe usare:

[YourNamespace].Properties.Settings.Default.[YourSettingName] 

Fornisce un riferimento fortemente tipizzato all'impostazione e restituisce il valore predefinito se non è definito nel file web.config. Per AppSettings dovresti usare:

System.Web.Configuration.WebConfigurationManager.AppSettings 
Problemi correlati