2009-04-15 29 views
9

アプリケーションをローカルで実行すると、設定した場所(つまり、<file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />)にlog4netログが問題なく書き込まれます。ただし、ClickOnce経由でアプリケーションを配備すると、ログファイルは書き込まれません。Log4netログファイルはどこでClickOnceの下に書き込むことができますか?

ClickOnceアプリケーションはどこに書き込めるかという点では限られていますが、LOCALAPPDATA(例:C:\ Users \ me \ AppData \ Local)がフェアゲームであったという印象を受けました。

アイデア? ClickOnceのでは

答えて

15

、フォルダルールは、通常のWindowsアプリケーションよりも多少異なります。 ClickOnceコンテンツファイルが展開されるデータフォルダは、c:¥Users¥me¥Local Settings¥Apps¥2.0¥Dataにあります。そのフォルダの下にはいくつかのサブフォルダレベルがあり、かなり暗黙の識別子があります。

したがって、特定のClickOnceアプリケーションの実際のデータフォルダは、ApplicationDeploymentクラスを使用して最もよく取得されます。また、あなたが配布モードで実行しているかどうかを確認するためにIsNetworkDeployedプロパティをチェックする必要があります

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

のDataDirectoryは、あなたのlog4netの設定ファイルにそのパスをハードコーディングすることができます方法はありませんClickOnceので決定されているので。私の提案は、アプリケーションの起動時にプログラマティックにファイルパスを変更することです。

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

これで問題が解決しない場合は、(例えばlog4net.config)設定ファイルを確認するには、あなたが確認する必要があり@Pakmanが言ったことと同様に、「データファイル」 – Pakman

+1

、として展開されていませんlog4net.configファイルプロパティのビルドアクションは、log4net.configファイルをアプリケーションでデプロイして読み込むために、コンテンツ(Noneではなく)に設定されています。 http://stackoverflow.com/a/16433824/602585 – deadlydog

関連する問題