2009-04-15 8 views
9

Cuando ejecuto mi aplicación localmente, escribo mi log4net log en la ubicación que he configurado (es decir, <file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />) sin ningún problema. Sin embargo, cuando despliegue mi aplicación a través de ClickOnce, el archivo de registro no se está escribiendo.¿Dónde puedo escribir mi archivo de registro de log4net en ClickOnce?

Sé que las aplicaciones de ClickOnce están limitadas en cuanto a dónde pueden escribir, pero tenía la impresión de que LOCALAPPDATA (por ejemplo, C: \ Users \ me \ AppData \ Local) era juego limpio.

¿Alguna idea?

Respuesta

15

Con ClickOnce, las reglas de carpeta son algo diferente que para aplicaciones regulares de Windows. La carpeta de datos, donde se implementan los archivos de contenido de ClickOnce, se encuentra en c: \ Users \ me \ Configuración local \ Aplicaciones \ 2.0 \ Datos. Debajo de esa carpeta hay un par de niveles de subcarpetas con identificadores bastante crípticos.

Para que la carpeta de datos real de una aplicación ClickOnce determinada se recupere mejor con la clase ApplicationDeployment. También debe comprobar la propiedad IsNetworkDeployed para ver si se está ejecutando en modo desplegado:

if (ApplicationDeployment.IsNetworkDeployed) 
{ 
    var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory; 
    ... 
} 

Desde el DataDirectory se decide por ClickOnce no hay ninguna manera se puede codificar ese camino en su configuración de log4net. Mi sugerencia sería modificar las rutas de archivos programáticamente al inicio de la aplicación.

foreach(var appender in LogManager.GetRepository().GetAppenders()) 
{ 
    var fileAppender = appender as FileAppender; 
    if (fileAppender != null) 
    { 
     fileAppender.File = 
      fileAppender.File.Replace("${LOCALAPPDATA}", dataDirectory); 
     fileAppender.ActivateOptions(); 
    } 
} 
+1

Si esto no resuelve su problema, asegúrese de que el archivo de configuración (por ejemplo log4net.config) no está siendo desplegado como un "archivo de datos" – Pakman

+1

Similar a lo que dijo @Pakman, es necesario asegurarse de la Acción de compilación en las propiedades del archivo log4net.config se establece en Contenido (no en Ninguno) para que la aplicación implemente y lea el archivo log4net.config. http://stackoverflow.com/a/16433824/602585 – deadlydog

Cuestiones relacionadas