2009-04-15 78 views
9

當我在本地運行我的應用程序時,它會將我的log4net日誌寫入我已配置的位置(即<file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />),而不會出現問題。但是,當我通過ClickOnce部署我的應用程序時,日誌文件沒有被寫入。我在哪裏可以將我的log4net日誌文件寫入ClickOnce下?

我知道ClickOnce應用程序在可寫入的地方是有限的,但我的印象是LOCALAPPDATA(例如C:\ Users \ me \ AppData \ Local)是公平的遊戲。

任何想法?

回答

15

使用ClickOnce,文件夾規則比普通的Windows應用程序有所不同。 ClickOnce內容文件部署到的數據文件夾位於c:\ Users \ me \ Local Settings \ Apps \ 2.0 \ Data中。在該文件夾下面有幾個子文件夾級別,具有相當神祕的標識符。

因此,對於給定的ClickOnce應用程序的實際數據文件夾,最好使用ApplicationDeployment類檢索。您也應該檢查IsNetworkDeployed屬性,看看你在部署模式下運行:

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

由於DataDirectory目錄是由ClickOnce的決定也沒有辦法,你可以硬編碼路徑到您的log4net的配置。我的建議是在應用程序啓動時修改文件路徑programmaticaly。

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 2013-03-20 20:37:06

相關問題