log4net не регистрируется после выпуска как WinOK-приложение ClickOnce - PullRequest
0 голосов
/ 10 мая 2018

Я создал приложение с двумя проектами - одним проектом Windows Forms и одной библиотекой классов, содержащей мои пользовательские элементы управления. Я добавил log4net в библиотеку классов с этой конфигурацией в файле log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <log4net>
    <root>
      <level value="INFO" />
      <appender-ref ref="FileAppender" />
    </root>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="${TMP}\log-file.txt" />
      <appendToFile value="true" />
      <encoding value="unicodeFFFE" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
  </log4net>
</configuration>

В файле для параметра «Действие построения» задано значение «Содержимое» и «Копировать в выходной каталог», установленное как «Копировать всегда». В AssemblyInfo.cs:

[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

Я использую регистратор из управления следующим образом:

using System;
using System.Windows.Forms;
using log4net;

namespace ControlProject
{
    public partial class MyControl : UserControl
    {
        private readonly ILog log;

        public MyControl()
        {
            InitializeComponent();

            log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        }

        private void logButton_Click(object sender, EventArgs e)
        {
            log.Info("Log something");
        }
    }
}

Теперь все это хорошо и прекрасно работает при использовании Visual Studio (эта конфигурация работает как в режиме отладки, так и в режиме выпуска). Но как только я публикую проект Windows Forms, регистрация больше не происходит. Когда я присоединяюсь к приложению из Visual Studio, я вижу, что журнал не настроен должным образом - нет никаких приложений. У меня закончились идеи, что с этим делать. Я попытался вмешаться в конфигурации (оба App.config, log4net.config), попытался добавить эту строку:

XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

Я также попытался добавить этот декоратор, чтобы убедиться, что метод инициализации журнала не оптимизирован:

[MethodImpl(MethodImplOptions.NoInlining)]

Может кто-нибудь посоветовать, пожалуйста, как заставить это работать?

1 Ответ

0 голосов
/ 11 мая 2018

Вам нужно позаботиться о нескольких вещах при развертывании приложения winform через ClickOnce.

  1. Где хранить файл log4net.config

    В один клик, этот файл недоступен. Возможно, вы захотите поместить этот файл в общую папку (MyDocuments / AppData и т. Д.) И перенастроить log4net при программном запуске приложения.

  2. Где записывать файлы журнала

    То же самое относится и к файлам журналов. Файлы журнала недоступны, приложение ClickOnce переходит в новую папку для каждой версии. Вам необходимо указать общее местоположение для записи файлов журнала (например, папки MyDocuments / AppData). При запуске приложения необходимо загрузить все приложения и перенастроить их, указав новое местоположение журнала.

Ссылка ниже может помочь вам

https://social.msdn.microsoft.com/Forums/windows/en-US/139eb00c-c39b-47ff-9401-b67e92589d81/logging-in-clickonce-looking-for-a-general-advice?forum=winformssetup

...