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)