2011-03-07 17 views
5

Tengo una aplicación principal que guarda la configuración en un archivo user.config.Obteniendo la ubicación del archivo user.config de cualquier aplicación .net

Tengo una segunda aplicación que necesita leer una configuración de este archivo.

¿Existe una manera simple/elegante de obtener la ubicación del archivo user.config de la aplicación principal?

supongo que podría construir la ruta manualmente desde

[Application.LocalUserAppDataPath] [CompanyName] [AppName + algún tipo de GUID] [versión de la aplicación]

pero que parece poderosamente hacky.

Respuesta

1

La lógica para la creación de una ruta de acceso al lugar donde está el archivo de configuración del usuario vive normalmente va integrado en la aplicación, escpecially las partes

[CompanyName][AppName + some sort of guid][App version] 

por lo que no es de manera general a pedir al marco en el que la configuración de usuario está almacenado.

Sin embargo, hemos resuelto este problema para nuestro sistema de programa, proporcionando una DLL común para todas las aplicaciones que contienen una función como esta

static Configuration GetMainConfig() 
{ 
    string mainPgmConfigDir = GetMainProgramConfigDir(); 
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); 
    configFile.ExeConfigFilename = Path.Combine(mainPgmConfigDir, "user.config"); 
    return ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None); 
} 

static string GetMainProgramConfigDir() 
{ 
    string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
    string companyDir = Path.Combine(appDataDir, VersionInfo.Company); 
    string productDir = Path.Combine(companyDir, "yourProgramName"); 
    string versionDir = Path.Combine(productDir, "yourVersionNumber"); 
    return versionDir; 
} 

Esta función le consigue la misma configuración de usuario para todas las aplicaciones.

+0

OK, gracias por su tiempo. Esto parece una solución decente ... –

0

Eso depende de lo que está a punto de hacer. Es posible que desee utilizar la ruta de instalación como un directorio base. O establezca un valor de registro si usa un instalador. ¿Y tal vez podrías crear un archivo de configuración independiente con los valores compartidos? De esa forma no mezclarás valores. No puedo ver si eso es apropiado para usted, ya que la pregunta no nos dice mucho. Entonces, estas son solo ideas.

0

Puede utilizar ConfigurationManager para cargar configuración de la aplicación en el objeto de configuración y luego obtener el nombre del archivo de allí:

Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
string userConfigFilePath = cfg.FileName; 

Tenga en cuenta que se pueden utilizar diferentes valores ConfigurationUserLevel llegar a la configuración global, local o móvil.

Editar: La versión de OpenExeConfiguration() que toma el nombre del archivo exe como argumento parece que solo da acceso al archivo de configuración de la aplicación, y no a la configuración del usuario.

+0

Gracias por la respuesta. ¿Cómo lo uso para obtener el archivo de configuración de una aplicación diferente? –

+1

ConfigurationManager.OpenExeConfiguration() tiene una versión que toma exe ruta como argumento: http://msdn.microsoft.com/en-us/library/ms224437.aspx –

+1

-1 Por lo que puedo decir la versión que acepta una exe ruta solo le dará el archivo App.config. Actualice su respuesta con la forma de obtener user.config de una aplicación diferente y eliminaré el voto negativo. –

Cuestiones relacionadas