Dot-Net
在 ClickOnce 下我可以將 log4net 日誌文件寫入哪裡?
當我在本地執行我的應用程序時,它會將我的 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(); } }