ho i seguenti progetti:.NET .config INFERNO
- MVC
- Console applicazione
- libreria di classi
- Windows Form
- Biblioteca COM
Tutte queste applicazioni devono utilizzare un singolo file di configurazione. Per quanto ho capito, i file app.config sono per Windows, le applicazioni della console e le librerie di classi quando web.config è per i progetti web.
La stessa configurazione deve essere accessibile in tutti questi progetti. Ho letto che si consiglia di utilizzare il file di configurazione della macchina, ma non sarà sempre possibile accedervi, pertanto i file di configurazione devono risiedere nella nostra soluzione.
Non capisco appieno come vengono generati i file di configurazione. Attualmente ho scritto un progetto semplice in cui ho il seguente:
- Libreria di classi da memorizzare per servire i file di configurazione. A hanno tentato di farlo attraverso la riflessione.
- Applicazione Windows che dovrebbe leggere app.config da una libreria di classi.
Quando eseguo il seguente codice mi aspetto di ottenere un file di configurazione con valori di prova:
_applicationSettings = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetAssembly(typeof(WCSConfiguration)).Location
).AppSettings;
ciò che ho, invece, è un file di impostazioni delle applicazioni vuoto.
libreria di classi ha il seguente App.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="TestTextKey" value="TestTextValue"/>
</appSettings>
</configuration>
Ho provato con .GetExecutingAssembly()
metodo che mi aspetto di tornare un insieme di un codice che è attualmente in esecuzione. Questo non ha funzionato, invece ha restituito l'assembly di un'applicazione Windows.
GetAssembly(type(WCSConfiguration))
ha restituito un assembly corretto, tuttavia, il file di configurazione era mancante nella directory bin/debug.
Ho la sensazione che sto facendo qualcosa di fondamentalmente sbagliato o Microsoft non ha reso abbastanza flessibile. Ho anche provato a cercare MSDN per la spiegazione, ma questo non è stato ben documentato IMO.
Ho anche lasciato COM in grassetto perché non sono sicuro se tutti i file di configurazione siano disponibili per la libreria COM. Innanzitutto vorrei far funzionare altri progetti.
Capisco che questa è una grande quantità di informazioni. Qualsiasi aiuto sarebbe molto apprezzato. Precedentemente abbiamo scelto di utilizzare il registro, ma questo si è rivelato brutto, principalmente perché l'accesso al registro non è disponibile in alcuni scenari.Inoltre ora abbiamo più versioni delle applicazioni e il passaggio tra i rami è una mezza un lavoro di un'ora :(
Grazie
Edit:
Se aggiungo le sezioni di configurazione del DLL per app.config questo significa che queste impostazioni saranno disponibili solo da quella applicazione.Si correggono se ho torto. \ r \ n \ r \ nEsempio che ho fornito è una versione ridotta.In totale ci sono una decina di applicazioni Windows, un singolo progetto MVC e una gamma di classe librerie tutte che devono fare uso di quella configurazione
Le impostazioni di configurazione sono principalmente stringhe di connessione, valori di ricerca che non appartengono al database e poche altre impostazioni minori. La preoccupazione principale a questo punto sono le stringhe di connessione. Esistono alcune versioni minori dell'applicazione in cui ogni versione punta a un altro database.
Quello che mi piacerebbe ottenere da questo è una buona soluzione praticabile in modo che possa essere pubblicato online e altre persone che incontrano lo stesso problema non trascorreranno giorni del loro tempo.
Morale della storia IMO: Usa sia App.config e web.config per memorizzare posizione del proprio file di configurazione.
Scrivere un semplice serializzatore XML per leggere/scrivere config e DLL per servire la configurazione.
Gli oggetti COM sono una lunga storia e sono stati implementati con un "hack", poiché né App.config né Web.config sono disponibili nelle DLL COM.
Hai provato a utilizzare http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openmappedexeconfiguration.aspx per aprire qualsiasi file di configurazione arbitrario? Immagino tu abbia un file di configurazione condiviso in una posizione condivisa a cui puoi puntare. –
Ho provato a usare questo. OpenMappedExeConfiguration funziona con gli eseguibili, piuttosto che con OpenMappedMachineConfiguration che pensavo potesse restituire una configurazione per una libreria di classi, ma nessuno dei due ha funzionato. –
OpenMappedExeConfiguration funziona con tutti i tipi di configurazione, non capisco cosa significa che funzioni per eseguibile? Lo uso quotidianamente per aprire i file di configurazione per le mie applicazioni web –