c#

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í .