Come trovare il percorso del file app.config attivo?

Sto cercando di completare questo gestore di eccezioni:

if (ConfigurationManager.ConnectionStrings["ConnectionString"]==null) { string pathOfActiveConfigFile = ...? throw new ConfigurationErrorsException( "You either forgot to set the connection string, or " + "you're using a unit test framework that looks for "+ "the config file in strange places, update this file : " + pathOfActiveConfigFile); } 

Questo problema sembra accadere solo a me quando sto usando nUnit.

Prova questo

 AppDomain.CurrentDomain.SetupInformation.ConfigurationFile 

Spero che sia d’aiuto

A rigor di termini, non esiste un singolo file di configurazione. Escludendo ASP.NET 1 ci possono essere tre file di configurazione usando il supporto integrato ( System.Configuration ). Oltre alla configurazione della macchina: app.exe.config , roaming utente e utente locale.

Per ottenere la configurazione “globale” ( exe .config):

 ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) .FilePath 

Utilizzare diversi valori ConfigurationUserLevel per i file di configurazione roaming e non roaming per l’uso.


1 Che ha un modello completamente diverso in cui il contenuto di una cartella figlio (IIS-virtuale o file system) web.config può (a seconda dell’impostazione) aggiungere o sovrascrivere il web.config del genitore.

Se si intende che si sta ottenendo un ritorno null solo quando si utilizza NUnit, probabilmente è necessario copiare il valore ConnectionString dell’app.config dell’applicazione nell’app.config della libreria di test.

Quando viene eseguito dal caricatore di test, l’assembly di test viene caricato in fase di runtime e apparirà nel proprio app.config (rinominato in testAssembly.dll.config in fase di compilazione) piuttosto che nel file di configurazione delle applicazioni.

Per ottenere la posizione dell’assembly in esecuzione, prova

 System.Reflection.Assembly.GetExecutingAssembly().Location 

La prima volta che ho realizzato che il progetto di test delle unità faceva riferimento a app.config in quel progetto piuttosto che a app.config associato al mio progetto di codice di produzione (fuori rotta, DOH) ho appena aggiunto una riga nell’evento Post Build del progetto Prod che copierà app.config nella cartella bin del progetto di test.

Problema risolto

Non ho notato nessun effetto collaterale finora, ma non sono sicuro che questa sia la soluzione giusta, ma almeno sembra funzionare.

Assicurati di fare clic sulle proprietà sul file e impostalo su “copia sempre” o non sarà nella cartella Debug \ con le tue felici lil dll per configurare dove deve essere e aggiungere più cowbell

A seconda della posizione del file di configurazione System.Reflection.Assembly.GetExecutingAssembly().Location potrebbe fare ciò che ti serve.

Ho provato una delle risposte precedenti in un’app Web (in realtà un ruolo Web di Azure in esecuzione in locale) e non ha funzionato. Tuttavia, questo approccio simile ha funzionato:

 var map = new ExeConfigurationFileMap { ExeConfigFilename = "MyComponent.dll.config" }; var path = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).FilePath; 

Il file di configurazione si trovava in C: \ Programmi \ IIS Express \ MyComponent.dll.config. Posto interessante per questo.

Un’altra opzione che ho visto manca qui:

 const string APP_CONFIG_FILE = "APP_CONFIG_FILE"; string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);