2009-04-15 6 views
9

Lorsque j'exécute mon application localement, elle écrit mon journal log4net à l'emplacement que j'ai configuré (c'est-à-dire, <file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />) sans problème. Toutefois, lorsque je déploie mon application via ClickOnce, le fichier journal n'est pas en cours d'écriture.Où puis-je écrire mon fichier journal log4net sous ClickOnce?

Je sais que les applications ClickOnce sont limitées en termes d'où ils peuvent écrire, mais j'avais l'impression que LOCALAPPDATA (par exemple, C: \ Users \ me \ AppData \ Local) était un jeu équitable.

Des idées?

Répondre

15

Avec ClickOnce, les règles de dossier sont quelque peu différentes que pour des applications régulières de Windows. Le dossier de données, sur lequel les fichiers de contenu ClickOnce sont déployés, se trouve dans c: \ Users \ me \ Local Settings \ Apps \ 2.0 \ Data. Sous ce dossier se trouvent deux niveaux de sous-dossiers avec des identifiants plutôt cryptiques.

Il est donc préférable de récupérer le dossier de données réel d'une application ClickOnce donnée à l'aide de la classe ApplicationDeployment. Vous devriez également vérifier la propriété IsNetworkDeployed pour voir si vous êtes en mode déployé:

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

Depuis le DataDirectory est décidé par ClickOnce il n'y a aucun moyen que vous pouvez hardcode cette voie dans log4net votre config. Ma suggestion serait de modifier les chemins de fichiers programmaticaly au démarrage de l'application.

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 cela ne résout pas votre problème, assurez-vous que le fichier de configuration (par exemple log4net.config) n'est pas déployé comme un « fichier de données » – Pakman

+1

similaires à ce que dit @Pakman, vous devez vous assurer l'action de construction sur les propriétés du fichier log4net.config est définie sur Contenu (et non sur Aucune) afin que le fichier log4net.config soit déployé et lu par votre application. http://stackoverflow.com/a/16433824/602585 – deadlydog

Questions connexes