2009-10-21 12 views
7

La mia comprensione è che .NET non esegue realmente i file di configurazione per le DLL: solo l'eseguibile principale o l'app Web riceve un file di configurazione e tutte le DLL a cui fa riferimento l'eseguibile/Web App leggono da esso.Impostazioni DLL .NET e Config quando c'è un riferimento Web - cosa sta succedendo?

Ma in VS2008, se si aggiunge un riferimento Web a un progetto di libreria di classi (DLL), aggiunge un file Settings.Settings e un file app.config al progetto. Contengono l'URL principale per il riferimento Web.

Quindi, a cosa servono questi file? Non c'è modo per la DLL di leggerli senza assistenza, giusto?

modifica: i contenuti di app.config e Settings.Settings sembrano fare la differenza però: cambiando (ad esempio) l'URL di riferimento Web nel file app.config del progetto DLL da solo non fa differenza, ma se modifica l'URL in app.config e poi apri il file Settings.Settings, le modifiche apportate in app.config vengono copiate in Settings.Settings. E quindi, la DLL preleva il nuovo valore in fase di esecuzione. Come sta facendo questo?

modifica: parte della mia confusione qui è perché non sono troppo chiaro sulla differenza tra Settings.Settings e app.config e come si relazionano tra loro, quindi forse anche le persone possono dare una mano con quel problema.

risposta

6

Non c'è modo per la DLL di leggerli, ma sono suggerimenti forti per un consumatore di DLL di ciò che si potrebbe desiderare di includere nei contesti reali/File di configurazione

Modifica

In risposta al commento di OP - Qualunque sia l'ultima modifica nelle impostazioni viene compilata nel codice come impostazione predefinita da eseguire se non è presente alcuna impostazione del nome corretto in fase di esecuzione. Ecco perché funziona.

+0

Modifiche al app.config vengono copiati al file Settings.Settings e poi sembrano ottenere raccolti in fase di esecuzione, per cui il suo non solo per lo spettacolo.Vedi la mia modifica sopra – codeulike

+0

Ah, grazie. Non ero molto chiaro sul modo in cui app.config si riferisce a Settings.Settings, quindi la tua modifica aiuta. – codeulike

6

Visual Studio deve aggiungere questa roba da qualche parte e non sa quale applicazione si desidera mettere in È possibile accedere alla configurazione per la DLL effettuando le seguenti operazioni:.

var config = ConfigurationManager.OpenExeConfiguration("MyDll.dll.config"); 

L'unica volta Ho trovato utile questo quando ho scritto un plugin come una DLL per un'applicazione di terze parti e volevo che la mia DLL fosse configurabile (non qualcosa che la maggior parte delle persone fa che spesso sospetto).

Di solito, tuttavia, è sufficiente spostare le parti di configurazione necessarie in app.config o web.config.

Modifica - Rispetto al tuo aggiornamento che ha senso. Le impostazioni con scope dell'applicazione settings.settings provengono dal file app.config dell'applicazione. Per le impostazioni con ambito applicazione è in realtà solo una classe fortemente tipizzata che rappresenta queste impostazioni.

+0

Quindi le DLL possono avere i file Settings.Settings e leggerli in fase di runtime? Dove finisce il contenuto di questi file dopo una compilazione? – codeulike

+0

No, la DLL con un file Settings.Settings la leggerà da app.config/web.config. Se questo non può essere trovato, ritornerà ai suoi valori predefiniti. – RichardOD

+0

Penso di confondervi, con il mio uso del termine app.config. Intendo il file di configurazione dell'applicazione principale (MyApp.exe.config o Web.config). Per me la configurazione della DLL è in realtà MyDll.dll.config. HTH – RichardOD

-2

Esiste la possibilità di leggere dai file di configurazione nella DLL. Basta aggiungere un file app.config al progetto DLL e assicurarsi di leggere le impostazioni di configurazione dall'interno della DLL. Una volta distribuito, il file di configurazione deve avere il nome "MyDLL.dll.config" (presupponendo che la DLL sia denominata "MyDLL.dll") e si trovi nella stessa cartella della DLL.

Il seguente codice dovrebbe restituire il mio connectionstring dalla mia dll:

return ConfigurationManager.AppSettings["ConnectionString"];

+4

Che non funzionerà. – RichardOD

+0

Inoltre, questo non è quello che sto chiedendo. Non sto chiedendo come far funzionare un file di configurazione con una DLL, sto chiedendo perché Visual Studio si preoccupa di aggiungerne uno per un progetto DLL. – codeulike

+0

Testato su .NET 4.6 e confermato che non funziona ancora. – EM0

Problemi correlati