2011-01-27 17 views
34

Ecco cosa la mia soluzione è bello come in questo momento:Una libreria di classi può avere un file App.config?

enter image description here

Nel progetto Tutomentor.Branding, mi piacerebbe salvare le informazioni di branding nel file App.config, come i nomi, i colori, ecc.

Nel progetto Tutomentor.Data, App.config è stato creato quando ho aggiunto un file modello .edmx di entità.

È possibile? Qualche consiglio?

Durante la distribuzione, l'output combina questi file App.config in uno solo?

risposta

38

No, le librerie di classi possono contenere i file di impostazione, ma i loro valori saranno definiti nella configurazione dell'applicazione (web.config, app.config ...).

Ciò è dovuto alla funzione di sovrascrittura delle impostazioni di configurazione.

È necessario dichiarare le sezioni di configurazione degli assembly in app.config o web.config della propria applicazione (WPF, SL, ASP.NET ...) e definire un valore per un determinato numero di impostazioni definite nelle corrette impostazioni di assemblaggio.

EDIT: Aggiungere un file di impostazione per il vostro progetto e aggiungere un ambiente con portata di applicazione, e la vostra assemblea sarebbe qualcosa di simile:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="Assembly1.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <Assembly1.Settings1> 
      <setting name="settingA" serializeAs="String"> 
       <value>a value</value> 
      </setting> 
     </Assembly1.Settings1> 
    </applicationSettings> 
</configuration> 

Ora avresti bisogno di andare alla vostra applicazione, e è necessario copiare e incollare il gruppo di sezioni e le dichiarazioni di sezione e la definizione dei valori per le impostazioni. È tutto.

+0

Puoi approfondire? Come faccio a "dichiarare le sezioni di configurazione degli assembly" in app.config o web.config dell'applicazione ". –

+0

Pugno si crea il file delle impostazioni nell'assieme non eseguibile, quindi si ripete la stessa sezione nell'applicazione eseguibile o nell'applicazione Web e si definisce lì il valore per un insieme di impostazioni :) Il nome della sezione (lo spazio dei nomi per il file delle impostazioni - in effetti, la classe - deve corrispondere nell'assembly e nell'eseguibile. L'eseguibile non ha bisogno di definire TUTTE le impostazioni dall'assemblaggio del satellite. Puoi definire 1, 2 o tutti. –

+0

Can si modifica la risposta e si fornisce un esempio di codice semplice –

3

Ogni configurazione specifica da app.config libreria, è necessario mettere nel file di configurazione exe manualmente.

0

Beh, la libreria di classi non può avere il proprio app.config, ma se si definiscono le impostazioni dalla libreria di classi in app.config per il file exe, la libreria di classi dovrebbe essere in grado di trovarli ..

Im un po 'incerto, ma non credo che li unirà automaticamente penso che tu debba farlo manualmente!

29

Mentre questo è un thread precedente, offre un altro aspetto.

Sembra si consiglia di esaminare la questione in modo diverso.

Librerie di classi per natura dovrebbero essere portabile. Quindi, qualsiasi configurazione necessaria dovrebbe essere passata alla classe, invece di risiedere con la libreria. Cose come le stringhe di connessione sono per loro natura transitorie, quindi ha senso inserirle nell'applicazione proprietaria.

Quando si utilizzano i metodi contenuti nella libreria, si passa qualsiasi informazione necessaria come parte della firma del metodo o come proprietà pubblica nella classe. Suggerisco di creare proprietà pubbliche per gli elementi di configurazione e di passarle quando si crea un'istanza della classe.

Ora non ci sono problemi con un app.config per la DLL e la DLL è quindi veramente portatile.

+0

Vedo il tuo punto e sono d'accordo. Ma allora perché Visual Studio consente anche la creazione di file "Settings.settings" per le DLL? Microsoft sta solo trollandoci? – Deantwo

3

Basta creare il proprio file XML, chiamarlo appConfig.xml o qualcosa di simile, fare in modo che la libreria di classi legga il file usando System.Xml invece di System.Configuration e impacchetta il file insieme alla propria DLL.

Problemi correlati