c# - Accediendo a App.config en una ubicación diferente del binario
(4)
Puede configurarlo creando un nuevo dominio de aplicación:
AppDomainSetup domainSetup = new AppDomainSetup();
domainSetup.ConfigurationFile = fileLocation;
AppDomain add = AppDomain.CreateDomain("myNewAppDomain", securityInfo, domainSetup);
En una aplicación de consola .NET Win, me gustaría acceder a un archivo App.config en una ubicación diferente del binario de la aplicación de consola. Por ejemplo, ¿cómo puede C: / bin / Text.exe obtener su configuración de C: / Test.exe.config?
Use lo siguiente (recuerde incluir el ensamblaje System.Configuration)
ConfigurationManager.OpenExeConfiguration(exePath)
using System.Configuration;
Configuration config =
ConfigurationManager.OpenExeConfiguration("C:/Test.exe");
A continuación, puede acceder a la configuración de la aplicación, a las cadenas de conexión, etc. desde la instancia de configuración. Esto supone, por supuesto, que el archivo de configuración está formateado correctamente y que su aplicación tiene acceso de lectura al directorio. Tenga en cuenta que la ruta no es "C: / Test.exe.config" El método busca un archivo de configuración asociado con el archivo que especifique. Si especifica "C: / Test.exe.config", buscará "C: / Test.exe.config.config". Un poco cojo, pero comprensible, supongo.
Referencia aquí: http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx
Parece que puede usar el método AppDomain.SetData
para lograr esto. La documentación dice:
No puede insertar o modificar entradas del sistema con este método.
De todos modos, hacerlo parece funcionar. La documentación del método AppDomain.GetData
enumera las entradas del sistema disponibles, de interés es la entrada "APP_CONFIG_FILE"
.
Si configuramos el "APP_CONFIG_FILE"
antes de utilizar cualquier configuración de la aplicación, podemos modificar desde dónde se carga el app.config
. Por ejemplo:
public class Program
{
public static void Main()
{
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"C:/Temp/test.config");
//...
}
}
Encontré esta solución documentada en este blog y se puede encontrar una respuesta más completa (a una pregunta relacionada) aquí .