我在哪里可以将我的log4net日志文件写入ClickOnce?

Rob*_*ers 9 .net permissions clickonce logging log4net

当我在本地运行我的应用程序时,它将我的log4net日志写入我配置的位置(即<file value="${LOCALAPPDATA}\TEST\Logs\debug.log" />),没有问题.但是,当我通过ClickOnce部署我的应用程序时,日志文件没有被写入.

我知道ClickOnce应用程序在他们可以写入的位置方面受到限制,但我的印象是LOCALAPPDATA(例如,C:\ Users\me\AppData\Local)是公平的游戏.

有任何想法吗?

Pet*_*old 15

使用ClickOnce,文件夹规则与常规Windows应用程序略有不同.部署ClickOnce内容文件的数据文件夹位于c:\ Users\me\Local Settings\Apps\2.0\Data中.在该文件夹下面是几个子文件夹级别,具有相当神秘的标识符.

因此,使用ApplicationDeployment类可以最好地检索给定ClickOnce应用程序的实际数据文件夹.您还应该检查IsNetworkDeployed属性以查看您是否在部署模式下运行:

if (ApplicationDeployment.IsNetworkDeployed)
{
    var dataDirectory = ApplicationDeployment.CurrentDeployment.DataDirectory;
    ...
}
Run Code Online (Sandbox Code Playgroud)

由于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();
    }
}
Run Code Online (Sandbox Code Playgroud)