visual studio modificar example crear archivo app c# .net nunit app-config configurationmanager

c# - studio - ¿Cómo encontrar la ruta del archivo app.config activo?



crear un archivo app.config en c# (8)

Estoy tratando de terminar este manejador de excepciones:

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

Este problema parece que solo me pasa cuando estoy usando nUnit.


Asegúrate de hacer clic en las propiedades del archivo y configurarlo como "copiar siempre", o no estará en la carpeta Debug / con tus archivos DLL felices para configurar dónde debe estar y agregar más cencerro.


Dependiendo de la ubicación de su archivo de configuración System.Reflection.Assembly.GetExecutingAssembly().Location puede hacer lo que necesita.


Estrictamente hablando, no hay un solo archivo de configuración. Excluyendo ASP.NET 1 , puede haber tres archivos de configuración usando el soporte incorporado ( System.Configuration ). Además de la configuración del equipo: app.exe.config , roaming del usuario y usuario local.

Para obtener la configuración "global" ( exe .config):

ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None) .FilePath

Use diferentes valores de ConfigurationUserLevel para los archivos de configuración de itinerancia y no itinerancia por uso.

1 Que tiene un modelo completamente diferente donde el contenido de las carpetas secundarias (IIS-virtual o sistema de archivos) web.config puede (dependiendo de la configuración) agregar o anular el web.config del padre.


Intenté una de las respuestas anteriores en una aplicación web (en realidad, una función web de Azure ejecutándose localmente) y no funcionó del todo. Sin embargo, este enfoque similar funcionó:

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

El archivo de configuración resultó estar en C: / Program Files / IIS Express / MyComponent.dll.config. Lugar interesante para eso


La primera vez que me di cuenta de que el proyecto de pruebas Unit hacía referencia a la app.config en ese proyecto en lugar de la app.config asociada con mi proyecto de código de producción (por supuesto, DOH) acabo de agregar una línea en el Post Build Event del proyecto Prod que copiará la aplicación.config a la carpeta bin del proyecto de prueba.

Problema resuelto

Hasta ahora no he notado ningún efecto secundario extraño, pero no estoy seguro de que esta sea la solución correcta, pero al menos parece funcionar.


Prueba esto

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

Espero eso ayude


Si quiere decir que solo obtiene un retorno nulo cuando usa NUnit, entonces probablemente necesite copiar el valor de ConnectionString en su app.config de su aplicación al app.config de su biblioteca de prueba.

Cuando es ejecutado por el cargador de prueba, el ensamblaje de prueba se carga en tiempo de ejecución y buscará en su propia aplicación.config (renombrada a testAssembly.dll.config en tiempo de compilación) en lugar de su archivo de configuración de aplicaciones.

Para obtener la ubicación del conjunto que está ejecutando, intente

System.Reflection.Assembly.GetExecutingAssembly().Location


Una opción más que vi falta aquí:

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