Ответ 1
Попробуйте это
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Надеюсь, что это поможет
Я пытаюсь закончить этот обработчик исключений:
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);
}
Эта проблема, похоже, происходит только со мной, когда я использую nUnit.
Попробуйте это
AppDomain.CurrentDomain.SetupInformation.ConfigurationFile
Надеюсь, что это поможет
Строго говоря, нет единого файла конфигурации. Исключение ASP.NET 1 может быть три файла конфигурации, используя встроенную поддержку (System.Configuration
). В дополнение к конфигурации устройства: app.exe.config
, пользовательский роуминг и пользовательский локальный.
Чтобы получить "глобальную" конфигурацию (exe.config):
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
.FilePath
Используйте разные значения ConfigurationUserLevel
для файлов роуминга и не-роуминга для каждого использования.
1 У какой совершенно другой модели, где содержимое дочерних папок (IIS-virtual или файловая система) web.config
может (в зависимости от настройки) добавить или переопределить родительский web.config
.
Если вы имеете в виду, что получаете только нулевой доход при использовании NUnit, вам, вероятно, нужно скопировать значение ConnectionString вашего app.config вашего приложения в app.config вашей тестовой библиотеки.
Когда он запускается тестовым загрузчиком, тестовая сборка загружается во время выполнения и будет выглядеть в своем собственном app.config(переименована в testAssembly.dll.config во время компиляции), а не в файл конфигурации ваших приложений.
Чтобы получить местоположение сборки, которую вы используете, попробуйте
System.Reflection.Assembly.GetExecutingAssembly().Location
В первый раз, когда я понял, что проект тестирования Unit ссылается на app.config в этом проекте, а не на app.config, связанный с моим проектом производственного кода (вне курса, DOH), я просто добавил строку в сообщение Post Build проект Prod, который скопирует файл app.config в папку bin тестового проекта.
Проблема решена
Я пока не заметил каких-либо странных побочных эффектов, но я не уверен, что это правильное решение, но, по крайней мере, это работает.
Убедитесь, что вы щелкнете свойства в файле и установите для него "копировать всегда", или он не будет находиться в папке "Отладка" с вашей DLL файлом happy lil, чтобы настроить, где это необходимо, и добавить больше колокольчиков
Я попробовал один из предыдущих ответов в веб-приложении (на самом деле веб-роль Azure работает локально), и это не совсем сработало. Однако этот подобный подход действительно сработал:
var map = new ExeConfigurationFileMap { ExeConfigFilename = "MyComponent.dll.config" };
var path = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None).FilePath;
Файл конфигурации оказался в папке C:\Program Files\IIS Express\MyComponent.dll.config. Интересное место для него.
В зависимости от местоположения вашего файла конфигурации System.Reflection.Assembly.GetExecutingAssembly().Location
может делать то, что вам нужно.
Еще один вариант, который я видел, отсутствует здесь:
const string APP_CONFIG_FILE = "APP_CONFIG_FILE";
string defaultSysConfigFilePath = (string)AppDomain.CurrentDomain.GetData(APP_CONFIG_FILE);