Jak znaleźć ścieżkę aktywnej aplikacji.plik konfiguracyjny?

Próbuję zakończyć ten wyjątek:

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);
}

Ten problem wydaje się przytrafiać mi się tylko wtedy, gdy używam nUnit.

Author: MatthewMartin, 2009-04-27

8 answers

Spróbuj tego

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Hope it helps

 334
Author: Cédric Rup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-27 14:46:08

Ściśle mówiąc, nie ma jednego pliku konfiguracyjnego. Wyłączając ASP.NET1 mogą być trzy pliki konfiguracyjne przy użyciu wbudowanej obsługi (System.Configuration). Oprócz konfiguracji maszyny: app.exe.config, User roaming i user local.

Aby uzyskać" globalną " konfigurację (exe.config):

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
                    .FilePath

Użyj różnych ConfigurationUserLevel wartości dla plików konfiguracyjnych roamingu per-use i innych niż roaming.


1 który ma zupełnie inny model gdzie zawartość folderów podrzędnych (IIS-virtual lub file system) web.config może (w zależności od ustawienia) dodawać lub nadpisywać web.config rodzica.

 61
Author: Richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-13 13:17:48

Jeśli masz na myśli, że otrzymujesz tylko zwrot null, gdy używasz NUnit, prawdopodobnie musisz skopiować wartość ConnectionString Twojej aplikacji.konfiguracja aplikacji do aplikacji.konfiguracja biblioteki testowej.

Gdy jest uruchamiany przez test loader, test assembly jest ładowany w czasie wykonywania i będzie wyglądał we własnej aplikacji.config (przemianowany na testAssembly.dll.config w czasie kompilacji), a nie Plik konfiguracyjny aplikacji.

Aby uzyskać lokalizację zespołu, który uruchamiasz, try

System.Reflection.Assembly.GetExecutingAssembly().Location
 8
Author: Colin Desmond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-27 14:13:19

Pierwszy raz zdałem sobie sprawę, że projekt testów jednostkowych odwołuje się do aplikacji.config w tym projekcie, a nie aplikacji.config związany z moim projektem kodu produkcyjnego (oczywiście, DOH) właśnie dodałem linię w zdarzeniu post Build projektu Prod, który skopiuje aplikację.config do folderu bin projektu testowego.

Problem rozwiązany

Do tej pory nie zauważyłem żadnych dziwnych skutków ubocznych, ale nie jestem pewien, czy jest to właściwe rozwiązanie, ale przynajmniej wydaje się działać.

 6
Author: Kasper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-06 20:46:09

Upewnij się, że klikniesz właściwości na pliku i ustaw go na "Kopiuj zawsze" lub nie będzie w folderze Debug\ z happy Lil dll, aby skonfigurować, gdzie ma być i dodać więcej cowbell

 5
Author: Chad Grant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-27 14:43:59

W zależności od lokalizacji pliku konfiguracyjnego System.Reflection.Assembly.GetExecutingAssembly().Location może zrobić to, czego potrzebujesz.

 3
Author: William Edmondson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-04 12:27:43

[1]}wypróbowałem jedną z poprzednich odpowiedzi w aplikacji internetowej (w rzeczywistości rola internetowa platformy Azure działa lokalnie)i nie zadziałało. Jednak to podobne podejście zadziałało:

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

Plik konfiguracyjny okazał się być w C:\Program Files\IIS Express\MyComponent.dll.config. Ciekawe miejsce.

 3
Author: RedGreenCode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-17 21:03:23

Brakuje jeszcze jednej opcji, którą widziałem:

const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);
 3
Author: selalerer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 15:47:23