【问题标题】:Where can I write my log4net log file to under ClickOnce?在 ClickOnce 下我可以将 log4net 日志文件写入哪里?
【发布时间】:2009-04-15 20:31:11
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: .net logging permissions clickonce log4net


    【解决方案1】:

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

    因此,给定 ClickOnce 应用程序的实际数据文件夹最好使用 ApplicationDeployment 类检索。您还应该检查 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();
        }
    }
    

    【讨论】:

    • 如果这不能解决您的问题,请确保配置文件(例如 log4net.config)没有被部署为“数据文件”
    • 与@Pakman 所说的类似,您需要确保 log4net.config 文件属性上的 Build Action 设置为 Content (not None),以便部署 log4net.config 文件并由您的应用程序读取。 stackoverflow.com/a/16433824/602585
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多