当我在本地运行我的应用程序时,它会将我的log4net日志写入我已配置的位置(即<file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />
)而没有任何问题。但是,当我通过ClickOnce部署我的应用程序时,日志文件没有被写入。
我知道ClickOnce应用程序在他们可以写入的位置方面受到限制,但我认为LOCALAPPDATA(例如,C:\ Users \ me \ AppData \ Local)是公平游戏。
有什么想法吗?
答案 0 :(得分:15)
使用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配置中。我的建议是在应用程序启动时修改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 :(得分:3)