Dot-Net

在 ClickOnce 下我可以將 log4net 日誌文件寫入哪裡?

  • April 25, 2009

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

我知道 ClickOnce 應用程序在可以寫入的位置方面受到限制,但我的印像是 LOCALAPPDATA(例如,C:\Users\me\AppData\Local)是公平的遊戲。

有任何想法嗎?

隔離儲存。

使用 ClickOnce,文件夾規則與正常 Windows 應用程序有些不同。部署 ClickOnce 內容文件的數據文件夾位於 c:\Users\me\Local Settings\Apps\2.0\Data。該文件夾下面是幾個子文件夾級別,具有相當神秘的標識符。

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

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

由於 DataDirectory 由 ClickOnce 決定,因此您無法將該路徑硬編碼到 log4net 配置中。我的建議是在應用程序啟動時以程式方式修改文件路徑。

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

引用自:https://stackoverflow.com/questions/753568